Методы Firebase Rewarded Video Delegate не вызываются

Я реализовал видео с вознаграждением в своем приложении, используя 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.")
}

Происходит следующее: я могу загрузить рекламу (после чего запускается наградаBasedVideoAdDidReceive), могу посмотреть рекламу и закрыть рекламу. Но функция, которая должна вознаграждать пользователя, не запускается. Мне нужно знать, почему это работает неправильно, чтобы я мог должным образом вознаградить пользователя.


person G. Drijfhout    schedule 16.07.2017    source источник


Ответы (1)


Вы когда-нибудь выясняли проблему? Думаю, я только что столкнулся с той же проблемой.

Я сделал именно то, что вы сделали в этом разделе "Я также вызываю объявление, когда я нажимаю кнопку:". Я пытался загрузить другую рекламу, нажав кнопку «Воспроизвести рекламу», если реклама не была готова.

После того, как вы представите объявление, для параметра «Готово» будет установлено нулевое значение. Таким образом, в вашей ситуации вы всегда будете загружать другое объявление сразу после его показа. И по какой-то причине запущенное в данный момент объявление, когда оно будет завершено, не попадет в метод rewardBasedVideoAd.

Таким образом, решение этой проблемы должно состоять в том, чтобы удалить загрузку другого объявления, если оно не готово. Я бы предложил вместо этого загрузить другое объявление сразу после завершения вознагражденияBasedVideoAd.

Итак, измените это:

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)
}
person Gabriel Pires    schedule 22.07.2017