我尝试实施奖励广告-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
}


别客气!

关于ios - AdMob-isReady属性更改时获取通知,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57872125/

10-12 05:51