2017-07-16 12 views
0

firebaseを使用してアプリケーションに報酬を与えたビデオを実装しました。私は、このページに応じて、必要なすべてを行っている:https://developers.google.com/admob/ios/rewarded-videoFirebase 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が実行されるの後)に広告をロードすることができ、私は広告を見て、広告を閉じることができます。しかし、ユーザーに報酬を与えるべき機能は実行されません。なぜこれが正しく動作しないのかを知る必要があるので、ユーザーに適切な報酬を与えることができます。

答えて

0

問題を解消しましたか? 私はちょうど同じ問題に遭遇したと思います。

このセクションで行ったことを正確に実行しました。「ボタンを押したときにも広告を呼び出します。」広告が準備できていない場合は、「広告を再生」を押すと別の広告を読み込もうとしました。

広告を提出すると、「isReady」はnilに設定されます。したがって、あなたの状況では、提示した直後に別の広告を読み込むことになります。なんらかの理由で、現在実行中の広告は、完了した時点で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) 
} 
関連する問題