では、デバイス側の実装です。
基本的には、ADバナーを表示した、BannerView クラスとほぼ同じ様な実装なんですが、動画リワード広告向けには、RewardBasedVideoAd ていうクラスがあるんで、これを利用していきます。
ま、ちょっと単純ミスをしてて、何度かやり直したんですが、こんな感じの実装で、結構簡単に(単純ミスを除いて)出る様になりました。
using UnityEngine;
using System.Collections;
using GoogleMobileAds.Api;
publicclassYGAdMobRewardAdManager:MonoBehaviour
{
//IOSAdUnit ID
publicstringIosUnitId;
//AndroidAdUnit ID
publicstringAndroidUnitId;
//RewardVideoAd.
privateRewardBasedVideoAdRewardAd=null;
protectedstringAdUnitID=null;
// Start
voidStart()
{
requestRewardAd();
}
// OnDestroy
voidOnDestroy()
{
}
publicboolIsActive{privateset;get;}
//requestRewardMovie Ad。
privatevoidrequestRewardAd()
{
#ifUNITY_ANDROID
AdUnitID = AndroidUnitId;
#elifUNITY_IPHONE
AdUnitID=IosUnitId;
#else
AdUnitID = "unexpected_platform";
#endif
this.RewardAd=RewardBasedVideoAd.Instance;
RewardAd.OnAdLoaded+=OnAdLoaded;
RewardAd.OnAdFailedToLoad+=OnAdLoadFailed;
RewardAd.OnAdStarted+=OnAdStarted;
RewardAd.OnAdClosed+=OnAdClosed;
RewardAd.OnAdRewarded+=OnAdRewarded;
RewardAd.OnAdLeavingApplication+=OnAdLeavingApp;
}
publicvoidLoadStart()
{
AdRequestrequest=newAdRequest.Builder().Build();
this.RewardAd.LoadAd(request,AdUnitID);
IsActive=true;
#ifUNITY_EDITOR
OnAdRewarded(null,null);
OnAdClosed(null,null);
#endif
}
protectedvoidOnAdLoaded(object_sender, System.EventArgs_args)
{
Debug.Log("AdLoaded");
//Justincase.
if(RewardAd.IsLoaded()==true)
RewardAd.Show();
}
protectedvoidOnAdLoadFailed(object_sender,AdFailedToLoadEventArgs_args)
{
Debug.Log("AdLoadFailed");
IsActive=true;
}
protectedvoidOnAdStarted(object_sender, System.EventArgs_args)
{
Debug.Log("AdStarted");
IsActive=true;
}
protectedvoidOnAdClosed(object_sender, System.EventArgs_args)
{
Debug.Log("AdClosed");
IsActive=false;
}
protectedvoidOnAdRewarded(object_sender,Reward_args)
{
Debug.Log("AdRewarded!!!");
if(_args !=null)
{
Debug.Log("AdRewardedRewardType["+_args.Type+"]");
Debug.Log("AdRewardedRewardAmount["+_args.Amount.ToString()+"]");
}
DailyBonusData.Instance.addSpecialBonusNotice("AD_REWARD_1");
IsActive=true;
}
protectedvoidOnAdLeavingApp(object_sender, System.EventArgs_args)
{
Debug.Log("AdLeavingApplication");
IsActive=false;
}
}
using System.Collections;
using GoogleMobileAds.Api;
publicclassYGAdMobRewardAdManager:MonoBehaviour
{
//IOSAdUnit ID
publicstringIosUnitId;
//AndroidAdUnit ID
publicstringAndroidUnitId;
//RewardVideoAd.
privateRewardBasedVideoAdRewardAd=null;
protectedstringAdUnitID=null;
// Start
voidStart()
{
requestRewardAd();
}
// OnDestroy
voidOnDestroy()
{
}
publicboolIsActive{privateset;get;}
//requestRewardMovie Ad。
privatevoidrequestRewardAd()
{
#ifUNITY_ANDROID
AdUnitID = AndroidUnitId;
#elifUNITY_IPHONE
AdUnitID=IosUnitId;
#else
AdUnitID = "unexpected_platform";
#endif
this.RewardAd=RewardBasedVideoAd.Instance;
RewardAd.OnAdLoaded+=OnAdLoaded;
RewardAd.OnAdFailedToLoad+=OnAdLoadFailed;
RewardAd.OnAdStarted+=OnAdStarted;
RewardAd.OnAdClosed+=OnAdClosed;
RewardAd.OnAdRewarded+=OnAdRewarded;
RewardAd.OnAdLeavingApplication+=OnAdLeavingApp;
}
publicvoidLoadStart()
{
AdRequestrequest=newAdRequest.Builder().Build();
this.RewardAd.LoadAd(request,AdUnitID);
IsActive=true;
#ifUNITY_EDITOR
OnAdRewarded(null,null);
OnAdClosed(null,null);
#endif
}
protectedvoidOnAdLoaded(object_sender, System.EventArgs_args)
{
Debug.Log("AdLoaded");
//Justincase.
if(RewardAd.IsLoaded()==true)
RewardAd.Show();
}
protectedvoidOnAdLoadFailed(object_sender,AdFailedToLoadEventArgs_args)
{
Debug.Log("AdLoadFailed");
IsActive=true;
}
protectedvoidOnAdStarted(object_sender, System.EventArgs_args)
{
Debug.Log("AdStarted");
IsActive=true;
}
protectedvoidOnAdClosed(object_sender, System.EventArgs_args)
{
Debug.Log("AdClosed");
IsActive=false;
}
protectedvoidOnAdRewarded(object_sender,Reward_args)
{
Debug.Log("AdRewarded!!!");
if(_args !=null)
{
Debug.Log("AdRewardedRewardType["+_args.Type+"]");
Debug.Log("AdRewardedRewardAmount["+_args.Amount.ToString()+"]");
}
DailyBonusData.Instance.addSpecialBonusNotice("AD_REWARD_1");
IsActive=true;
}
protectedvoidOnAdLeavingApp(object_sender, System.EventArgs_args)
{
Debug.Log("AdLeavingApplication");
IsActive=false;
}
}
特に、ポイントも何もないんですが、各イベントのハンドラーを、しっかり設定しましょうね。ってくらいですかね。
LoadStart() で、動画の読み込みを開始して、OnAdRewarded() が発生したら、リワードを受け渡し。
途中で何か、問題が発生したら、動画リワード広告を非アクティブ状態にして、GameManager 側で適切に処理。
GameManager 側では、一応、ロード開始時に、iOS ロードィングスピナーを表示して、バナー広告が表示されてれば、それを消す処理が入ってます。
これで、デバイスで実行すると、まずは、自分のコードで動画リワード広告の表示を促して...
"WATCH" を選択されたら、LoadStart() をコール。すると...
動画広告が表示され始めました!ロード時間は、結構かかってる印象ですね。
で、これが終わると、右上に閉じるボタンが付いた静止画面になります。
で、"x" を押すと、OnAdClosed() イベントが発生しておしまいです。
意外と簡単でした!!
さて、一応単純ミスについて。
ホントに単純で、渡す広告ユニットID を間違ってたんですよね。でも、Google 様の AdMob クラスで、きっちりエラーメッセージを出してくれるので、何か問題があったら、コンソール出力を確認しましょうね。
出力されてたエラーは、こんなんでした。
"Invalid Request. Cannot determine request type. Is your ad unit id correct?"
では、また何かネタができたら!!







