【问题标题】:Firebase Rewarded Video Delegate methods not called未调用 Firebase 奖励视频委托方法
【发布时间】:2017-07-16 16:49:14
【问题描述】:

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

【问题讨论】:

    标签: ios firebase swift3 rewardedvideoad


    【解决方案1】:

    你有没有发现这个问题? 我想我遇到了同样的问题。

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

    在您展示广告后,“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)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-14
      • 1970-01-01
      相关资源
      最近更新 更多