2016年12月14日

AdMob | Unity Ad | 動画リワード広告の実装

Version 1.1.0 絶賛公開中!!
すくすく教育シリーズ第一弾

では、デバイス側の実装です。

基本的には、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;
    }
}

特に、ポイントも何もないんですが、各イベントのハンドラーを、しっかり設定しましょうね。ってくらいですかね。
LoadStart() で、動画の読み込みを開始して、OnAdRewarded() が発生したら、リワードを受け渡し。
途中で何か、問題が発生したら、動画リワード広告を非アクティブ状態にして、GameManager 側で適切に処理。

GameManager 側では、一応、ロード開始時に、iOS ロードィングスピナーを表示して、バナー広告が表示されてれば、それを消す処理が入ってます。

これで、デバイスで実行すると、まずは、自分のコードで動画リワード広告の表示を促して...
RewardAd_Select.jpg

"WATCH" を選択されたら、LoadStart() をコール。すると...
Reward_Ad_Started.jpg
動画広告が表示され始めました!ロード時間は、結構かかってる印象ですね。
で、これが終わると、右上に閉じるボタンが付いた静止画面になります。
Reward_Ad_Done.jpg
で、"x" を押すと、OnAdClosed() イベントが発生しておしまいです。

意外と簡単でした!!

さて、一応単純ミスについて。
ホントに単純で、渡す広告ユニットID を間違ってたんですよね。でも、Google 様の AdMob クラスで、きっちりエラーメッセージを出してくれるので、何か問題があったら、コンソール出力を確認しましょうね。
出力されてたエラーは、こんなんでした。

"Invalid Request. Cannot determine request type. Is your ad unit id correct?"


では、また何かネタができたら!!

初めてみました。よかったらクリックお願いしますね ♪
        にほんブログ村 ゲームブログ×PlayNCBlogへ 
posted by やまけん at 07:41| Comment(0) | Unity | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は180日以上新しい記事の投稿がないブログに表示されております。