1

我已经使用 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),我可以观看广告并关闭广告。但是,应该奖励用户的功能没有运行。我需要知道为什么它不能正确运行,这样我才能适当地奖励用户。

4

1 回答 1

3

你有没有弄清楚这个问题?我想我刚刚遇到了同样的问题。

我完全按照您在本节“按下按钮时也调用广告:”中所做的操作。如果广告尚未准备好,我尝试在按“播放广告”时加载另一个广告。

展示广告后,“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)
}
于 2017-07-22T08:36:11.573 回答