AdMob - 在 isReady 属性 发生变化时获取通知
AdMob - Get Notify when isReady property changes
我正在尝试实施 奖励广告 - Rewarded Ads New APIs (Beta)。视频已加载,isReady
属性 将在几秒钟内变为 true
。
我有一个按钮,用户按下后会出现 奖励视频
这是当用户按下按钮时触发的函数
func presentRewardAd(from viewController: UIViewController) {
if rewardedAd.isReady {
rewardedAd.present(fromRootViewController: viewController, delegate: self)
}
}
问题是
我想在视频 isReady == true
之前隐藏按钮,当它准备好时显示按钮。所以我想在 rewardedAd.isReady
发生变化时得到通知。
到目前为止我尝试了什么:
class CustomRewardAd: GADRewardedAd {
private var observation: NSKeyValueObservation?
override init(adUnitID: String) {
super.init(adUnitID: adUnitID)
observation = observe(\.isReady, options: [.old, .new]) { object, change in
print("isReady changed from: \(change.oldValue!), updated to: \(change.newValue!)")
}
}
}
我也试过这个 Using Key-Value Observing in Swift 但结果相同。
但是 changeHandler
永远不会被调用。我做错了什么吗?
谢谢!
我找到了解决方案,虽然不理想,但很管用!也许这对将来的人有帮助。
当新的奖励请求完成时,isReady
属性 设置为 true
或 false
取决于响应是什么。
private func createAndLoadRewardedAd() -> GADRewardedAd {
let rewardedAd = GADRewardedAd(adUnitID: "ca-app-pub-3940256099942544/1712485313")
rewardedAd.load(GADRequest()) { [weak self] error in
guard let self = self else { return }
self.videoIsReady?(rewardedAd.isReady) // already set
}
return rewardedAd
}
不客气!
我正在尝试实施 奖励广告 - Rewarded Ads New APIs (Beta)。视频已加载,isReady
属性 将在几秒钟内变为 true
。
我有一个按钮,用户按下后会出现 奖励视频
这是当用户按下按钮时触发的函数
func presentRewardAd(from viewController: UIViewController) {
if rewardedAd.isReady {
rewardedAd.present(fromRootViewController: viewController, delegate: self)
}
}
问题是
我想在视频 isReady == true
之前隐藏按钮,当它准备好时显示按钮。所以我想在 rewardedAd.isReady
发生变化时得到通知。
到目前为止我尝试了什么:
class CustomRewardAd: GADRewardedAd {
private var observation: NSKeyValueObservation?
override init(adUnitID: String) {
super.init(adUnitID: adUnitID)
observation = observe(\.isReady, options: [.old, .new]) { object, change in
print("isReady changed from: \(change.oldValue!), updated to: \(change.newValue!)")
}
}
}
我也试过这个 Using Key-Value Observing in Swift 但结果相同。
但是 changeHandler
永远不会被调用。我做错了什么吗?
谢谢!
我找到了解决方案,虽然不理想,但很管用!也许这对将来的人有帮助。
当新的奖励请求完成时,isReady
属性 设置为 true
或 false
取决于响应是什么。
private func createAndLoadRewardedAd() -> GADRewardedAd {
let rewardedAd = GADRewardedAd(adUnitID: "ca-app-pub-3940256099942544/1712485313")
rewardedAd.load(GADRequest()) { [weak self] error in
guard let self = self else { return }
self.videoIsReady?(rewardedAd.isReady) // already set
}
return rewardedAd
}
不客气!