想要将 GoogleMobileAds 放入它自己的类中面对“未呈现提供的视图控制器..”

问题描述

我在应用中加载了 2 个不同的 UITabbarController 标签和 2 个不同的 UIViewControllers。我正在考虑将 adMob 代码移动到它自己的类中,这样我只需加载一次奖励广告即可在任何地方使用。

这是我想出来的,但是当我按下按钮展示广告时,我收到以下错误消息:

GADFullScreenPresentingAd:广告未能呈现全屏内容错误提供的视图控制器未呈现..

这是admob类的代码

import GoogleMobileAds

class GDS: UIViewController,GADFullScreenContentDelegate {

  var adMobRewardedAd: GADRewardedAd?
      
    override func viewDidLoad() {
        super.viewDidLoad()
      setupRewardedAd()
    }
  
  
  func setupRewardedAd() {
    let request = GADRequest()
    GADRewardedAd.load(withAdUnitID: "XXXXXXXXXXXXXXXX",request: request,completionHandler: { (ad,error) in
                        if let error = error {
                          print("Failed to load rewardedAds  ad with error: \(error.localizedDescription)")
                          return
                        }
                        print("GDS - RewardedAd Loading Succeeded: :\(Date())")
                        self.adMobRewardedAd = ad
                        self.adMobRewardedAd?.fullScreenContentDelegate = self
                       }
    )
  }


func showRewardedAd(medalsToReward: Int) {
  if let ad = adMobRewardedAd {
    ad.present(fromrootViewController: self,userDidEarnRewardHandler: {
                let reward = ad.adReward
                // Todo: Reward the user.
                print("\n=== showRewardedAd - reward User with ===\n")
               }
    )
  } else {
    print("1 showRewardedAd: Ad wasn't ready")
    presentAdError()
  }
}
 
  func presentAdError() {
    let alertController = UIAlertController(title: "Rewarded ad Failed to present",message: "Please Try Again Later.",preferredStyle: .alert)
    alertController.addAction(UIAlertAction(title: "OK",style: .cancel,handler: {( action: UIAlertAction ) in
    /// print("cancel pressed")   
    }))
        
    self.present(alertController,animated: true)
  }
  
  func adDiddismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad did dismiss full screen content.")
    setupRewardedAd()
  }
  
  
  func adDidPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("adDidPresentFullScreenContent: Ad did present full screen content.")
  }

  
  func ad(_ ad: GADFullScreenPresentingAd,didFailToPresentFullScreenContentWithError error: Error) {
    print("GADFullScreenPresentingAd: Ad Failed to present full screen content with error \(error.localizedDescription).")
    
    /// Todo: Add Error Message?
    presentAdError()
  }
}

这就是我在我的标签调用/设置 admob 广告加载的方式(通过按下按钮)

class VCLibrary: UIViewController {
  
  let loadAdmob = GDS()

 override func viewDidLoad() {
    super.viewDidLoad()
    
    /// .. some table loading code
    
    loadAdmob.setupRewardedAd()
    }

这就是我通过 tableviewHeader 上的按钮调用广告的方式

  func tableView(_ tableView: UITableView,viewForHeaderInSection section: Int) -> UIView? {
   ///... Some code
    button.addTarget(self,action: #selector(vcLibraryShowAdsButton(_:)),for: .touchUpInside)
   ///... More code

}

  @objc private func vcLibraryShowAdsButton(_ sender: UIButton) {
    loadAdmob.showRewardedAd(medalsToReward: xxx))
   }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)