我正在将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))
}