【发布时间】:2021-05-29 21:11:26
【问题描述】:
我正在尝试在我的 SwiftUI 应用中使用 Admob 制作奖励广告,但遇到了一些问题。我正在使用用 obj-c 编写的官方文档,并试图从中创建 swift 类。 这是我所拥有的
final class Rewarded: NSObject, GADFullScreenContentDelegate {
let token = Bundle.main.object(forInfoDictionaryKey: "GADApplicationIdentifier") as? String
var rewardedAd = GADRewardedAd()
var rewardFunction: (() -> Void)? = nil
override init() {
super.init()
LoadRewarded()
}
func LoadRewarded() {
let req = GADRequest()
GADRewardedAd.load(withAdUnitID: token!, request: req, completionHandler: { gad, error in
print(error)
})
}
func showAd(rewardFunction: @escaping () -> Void){
let root = UIApplication.shared.windows.first?.rootViewController
do {
try self.rewardedAd.canPresent(fromRootViewController: root!)
self.rewardFunction = rewardFunction
self.rewardedAd.present(fromRootViewController: root!, userDidEarnRewardHandler: rewardFunction)
} catch let error {
print(error)
}
}
func rewardedAd(_ rewardedAd: GADRewardedAd, userDidEarn reward: GADAdReward) {
if let rf = rewardFunction {
rf()
}
}
func rewardedAdDidDismiss(_ rewardedAd: GADRewardedAd) {
self.rewardedAd = GADRewardedAd()
LoadRewarded()
}
}
在方法showAd 中,我从try self.rewardedAd.canPresent(fromRootViewController: root!) 的调用中遇到了一个异常nilerror,并且不知道该怎么做。我没有找到任何说明如何使用 sdk 8+ 版本设置它的教程,请您帮我找出问题所在。
【问题讨论】:
-
纯 SwiftUI 应用程序中没有根视图控制器。您可以使用旧的 SwiftUI 方法将 SwiftUI 视图层次结构包装在 UIHostingController 中,也可以将 admob 视图控制器包装在 UIViewRepresentable 中。