adDidDismissFullScreenContent() 在版本 8 上从未被调用

Md *_*ury 1 admob ios swift

我正在使用GADRewardedAd,我的要求是广告关闭后显示视图。在 API 版本 8 上,adDidPresentFullScreenContent() 会调用更新,但不会调用adDidDismissFullScreenContent()方法。

private var rewardedAdView: GADRewardedAd!
GADRewardedAd.load(withAdUnitID: UserDefaults.standard.string(forKey: Constants.ADMOB_KEY_AD_REWARDED) ?? "",
                            request: GADRequest(), completionHandler: { (ad, error) in
                              if let error = error {
                                print("Rewarded ad failed to load with error: \(error.localizedDescription)")
                                return
                              }
                              self.rewardedAdView = ad
                              self.rewardedAdView.fullScreenContentDelegate = self
                            }
Run Code Online (Sandbox Code Playgroud)
private func showRewardedAds(){
        self.isAdEarnComplete = false
        if let ad = rewardedAdView {
              ad.present(fromRootViewController: self,
                       userDidEarnRewardHandler: {
                               showToast(viewContoler: self, message: "Your coupon is ready!")
                       }
              )
    }

Run Code Online (Sandbox Code Playgroud)
extension HomeViewController: GADFullScreenContentDelegate{
    func adDidPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
        print("Rewarded ads present")
    }
    
    func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
        print("Rewarded ads dismiss")
    }
    
       
    func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
        printLog(tag: TAG, message:  "Error: \(error.localizedDescription)")
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 10

确保 GADInterstitialAd 实例是强引用的成员变量或属性,并且在调用 adDidDismissFullScreenContent 之前不要将实例设置为 nil。\n例如:\xc2\xa0

\n
    \n
  1. interstitial(GADInterstitialAd) 是 GADInterstitialAdLoadCompletionHandler 中的局部变量,完成回调完成后,变量 interstitial 将被释放,并且不会调用 delegate 的函数。
  2. \n
  3. interstitial(GADInterstitialAd) 是 \xc2\xa0 UIViewController 的属性,\xc2\xa0 调用“interstitial.present(fromRootViewController: self)”后立即将 interstitial 设置为 nil,委托的函数将不会被调用(同样的原因,变量将被调用)在调用回调之前释放)。您可以在 adDidDismissFullScreenContent 中将此属性设置为 nil。
  4. \n
\n


小智 5

我知道这是旧线程,但也许这对某人有帮助 - 用户收到奖励后我就加载新的广告,所以这实际上清除了旧的 GADRewardedAd 引用,因此 adDidDismissFullScreenContent 未被调用。