ぱふの自由帳

週2更新目指す技術ブログ。メインはUnity。最近、競プロ始めましたー!良ければフォローお願いします(`・ω・´)

Admobの動画広告を連続で表示したい

はじめに

「Admobの動画広告を何度も表示させたい!でも、公式サイトのサンプルのままじゃ1回しか読み込めない…」ということがあったのでメモついでの記事になります。
もっとスマートな方法があると思いますが…ネ

実装

細かいAdmobの使用方法は以下のサイトを参考にしてください。

さて、色々説明する前にコードを貼っときます!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GoogleMobileAds.Api;


public class Admob : MonoBehaviour {

    private RewardBasedVideoAd rewardBasedVideo;

    private string videoId;

    void Start(){
        RequestRewardBasedVideo ();
    }

    // 動画広告リクエスト(最初に呼びます)
    private void RequestRewardBasedVideo() {

        #if UNITY_ANDROID
        videoId = "ca-app-pub-3940256099942544/5224354917";
        #elif UNITY_IPHONE
        videoId = "ca-app-pub-3940256099942544/1712485313";
        #else
        videoId = "unexpected_platform";
        #endif

        rewardBasedVideo = RewardBasedVideoAd.Instance;
        AdRequest request = new AdRequest.Builder().Build();
        rewardBasedVideo.LoadAd(request, videoId);
        rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded;
    }

    // 動画広告が最後まで視聴されたら呼び出される
    void HandleRewardBasedVideoRewarded(object sender, System.EventArgs e){
        // 動画広告再取得
        StartCoroutine ("RequestRewardBasedVideoAgain");
    }

    // 動画広告再取得関数
    IEnumerator RequestRewardBasedVideoAgain(){
        while (true){
            // 適当な時間を設定します(失敗時の再取得時間)
            yield return new WaitForSeconds(10.0f);
    
            // 通信ができない場合は、リロードしない
            if (Application.internetReachability != NetworkReachability.NotReachable){
                rewardBasedVideo = RewardBasedVideoAd.Instance;
                AdRequest request = new AdRequest.Builder().Build();
                rewardBasedVideo.LoadAd(request, videoId);
                break;
            }
        }
    }
}

コードを読むとある程度分かると思うので、軽く流れを説明しておきます。

まず動画広告を流すことが出来るように用意をします。私も詳しくは分からないのですが、この処理をリクエスト処理と呼ぶらしいです。そして、動画広告を最後まで視聴すると動画広告を再取得する関数が呼び出されるようになっています。
工夫点(?)はRequestRewardBasedVideoAgain関数内で動画広告が取得出来なかった際に再取得する処理を行っている点です。なぜか視聴後すぐにリクエスト処理を行うとすると失敗するんですよね…。しかも、リクエスト処理が成功する間隔が一定じゃない気もする…。(原因が分かる方はコメントに書いていただけると助かります!)

!使用する際の注意!
上記のコードは動画が最後まで視聴された場合しか想定していませんが、実際は途中で視聴をキャンセルした場合等も考慮してコードを完成させる必要があります。上記のサイトを参考にイベントハンドラを追加してください。

おわり

同じ処理してるコードまとめないの?恥ずかしくないの?という声が聞こえてきそうなコードですが…そこは目を瞑ってください(´・ω・`。) 良い関数名が思いつかなかったんです…(笑)

なお、「こういう手軽な方法があるよ」や「間違ったこと書いているよ」等ありましたらコメントやtwitterのDMで教えて下さると助かります( ´ ▽ ` )

初心者の方や熟練者の方を問わずTwitterのフォローお待ちしています…(`・ω・´) ヨロシク!