1

我正在将rewardedAds 加载到应用程序中的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))
   }
4

0 回答 0