未调用 Firebase 奖励视频委托方法

Firebase Rewarded Video Delegate methods not called

我已经使用 firebase 在我的应用中实现了奖励视频。我已经根据此页面完成了所有必要的工作:https://developers.google.com/admob/ios/rewarded-video

我导入了以下内容(关于广告):

import Firebase
import GoogleMobileAds

class ViewController: UIViewController, MFMailComposeViewControllerDelegate, GKGameCenterControllerDelegate, GADInterstitialDelegate, GADRewardBasedVideoAdDelegate, UIAlertViewDelegate {...}

所以我设置了委托并加载了一个广告:

rewardBasedVideo = GADRewardBasedVideoAd.sharedInstance()
    rewardBasedVideo.delegate = self
    if !adRequestInProgress && rewardBasedVideo?.isReady == false {
        GADRewardBasedVideoAd.sharedInstance().delegate = self
        rewardBasedVideo?.load(GADRequest(),
                               withAdUnitID: "ca-app-pub...")
        adRequestInProgress = true
    }

我按下按钮时也会调用广告:

if rewardBasedVideo?.isReady == true {
        rewardBasedVideo?.present(fromRootViewController: self)

    if !adRequestInProgress && rewardBasedVideo?.isReady == false {
        rewardBasedVideo?.load(GADRequest(),
                               withAdUnitID: "ca-app-pub-3940256099942544/1712485313")
            //ca-app-pub-8020832369894951/1361675226
        adRequestInProgress = true
    }

那么,我拥有委托的所有功能:

func rewardBasedVideoAd(_ rewardBasedVideoAd: GADRewardBasedVideoAd,
                        didRewardUserWith reward: GADAdReward) {
    print("You eaerned $\(abbreviateNumber(num: (moneyPerSecond * 360.0) as NSNumber))")
    money = UserDefaults.standard.double(forKey: moneyKey)
    money += moneyPerSecond * 360.0
    UserDefaults.standard.set(money, forKey: moneyKey)
}

func rewardBasedVideoAdDidReceive(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
    adRequestInProgress = false
    print("Reward based video ad is received.")
}

func rewardBasedVideoAdDidOpen(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
    print("Opened reward based video ad.")
}

func rewardBasedVideoAdDidStartPlaying(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
    print("Reward based video ad started playing.")
}

func rewardBasedVideoAdDidClose(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
    print("Reward based video ad is closed.")
}

func rewardBasedVideoAdWillLeaveApplication(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
    print("Reward based video ad will leave application.")
}

func rewardBasedVideoAd(_ rewardBasedVideoAd: GADRewardBasedVideoAd,
                        didFailToLoadWithError error: Error) {
    print("Reward based video ad failed to load.")
}

发生以下情况:我可以加载广告(之后是 rewardBasedVideoAdDidReceive 运行s),我可以观看广告并关闭广告。但是,应该奖励用户的功能并没有运行。我需要知道为什么这 运行 不正确,所以我可以适当地奖励用户。

你有没有想过这个问题? 我想我 运行 遇到了同样的问题。

我完全按照您在本节中所做的做了 "I also call the ad when I press a button:"。如果广告尚未准备好,我尝试在按 "play ad" 时加载另一个广告。

展示广告后,"isReady" 将设置为零。因此,在您的情况下,您总是会在展示一个广告后立即加载另一个广告。由于某些原因,当前 运行 广告在完成后不会触发 rewardBasedVideoAd 方法。

因此,解决此问题的方法应该是在广告未准备好时取消加载另一个广告。我建议在 rewardBasedVideoAd 完成后立即加载另一个广告。

所以改变这个:

if rewardBasedVideo?.isReady == true {
    rewardBasedVideo?.present(fromRootViewController: self)

if !adRequestInProgress && rewardBasedVideo?.isReady == false {
    rewardBasedVideo?.load(GADRequest(),
                           withAdUnitID: "ca-app-pub-3940256099942544/1712485313")
        //ca-app-pub-8020832369894951/1361675226
    adRequestInProgress = true
}

对此:

if rewardBasedVideo?.isReady == true {
    rewardBasedVideo?.present(fromRootViewController: self)
}