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 属性 设置为 truefalse 取决于响应是什么。

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
}

不客气!