質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.63%

AdMobで動画広告を2回以上表示したい。

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 1,984

tkmnusr

score 296

前提・実現したいこと

AdMobで動画広告を2回以上表示するにはどうすればよいのでしょうか?
「rewardBasedVideo = RewardBasedVideoAd.Instance;」で取得しているので、
動画広告を破棄したり、newするタイミングみたいなのがなさそうなので、2回目以降の表示方法がわかりません。

今回は下記コードで、便宜上、HandleRewardBasedVideoRewarded内で、2回目以降の動画広告の表示を試みています。
(このように連続表示したいわけではありませんが、とりあえず、動画広告が終了した後、再び、動画広告を表示させる方法を知りたい為。)
しかし、実行すると最初の動画広告は表示されますが、次の動画広告は表示されません。
HandleRewardBasedVideoRewarded内で仕込んだログは出力されるので、コードは通っています。

また、「rewardBasedVideo.OnAdRewarded」のイベントハンドラの重複登録を避けるため、
RequestRewardBasedVideo()内でフラグを立てて分岐させていますが、
果たしてRequestRewardBasedVideo()内でこのように書くことがよいことなのかどうかもわかっていません。
(マニュアルを見ただけでは、広告イベントを登録する場所が分からなかった為)

ご教授のほど、宜しくお願い致します。

該当のソースコード

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

public class AdMob : MonoBehaviour {

    private string Android_Interstitial = "XXXX(実際には値を入れています。)";
    private string ios_Interstitial = "XXXX(実際には値を入れています。)";

    private RewardBasedVideoAd rewardBasedVideo;
    private bool rewardBasedEventHandlersSet = false;

    void Start () {
        RequestRewardBasedVideo ();
        Invoke ("showRewardBasedVideo", 5);
    }

    public void showRewardBasedVideo()
    {
        if (rewardBasedVideo != null && rewardBasedVideo.IsLoaded ()) {
            rewardBasedVideo.Show();
        }
    }

    private void RequestRewardBasedVideo()
    {
        #if UNITY_ANDROID
        string adUnitId = Android_Interstitial;
        #elif UNITY_IPHONE
        string adUnitId = ios_Interstitial;
        #else
        string adUnitId = "unexpected_platform";
        #endif

        rewardBasedVideo = RewardBasedVideoAd.Instance;

        //この登録処理は、ここ(RequestRewardBasedVideo()内)に書くべきですか?
        if (!rewardBasedEventHandlersSet) {
            // has rewarded the user.
            rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded;
            rewardBasedEventHandlersSet = true;
        }

        AdRequest request = new AdRequest.Builder ().Build ();
        rewardBasedVideo.LoadAd (request, adUnitId);    
    }

    void HandleRewardBasedVideoRewarded (object sender, Reward args)
    {
        //Debug.Log ("テスト");  //出力確認済み。

        //この書き方では、2回目以降の動画広告が表示されないのですか?
        RequestRewardBasedVideo ();
        Invoke ("showRewardBasedVideo", 5);
    }

}

補足情報(言語/FW/ツール等のバージョンなど)

https://firebase.google.com/docs/admob/unity/rewarded-video?hl=ja

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

コードを確認しましたが概ね問題はなさそうです。
恐らく2回目以降の動画のロードが終わってないもしくは失敗している可能性がありますね。
ロード失敗した際に下記のように再ロードをする処理を入れてみたらどうでしょうか?

// ロード失敗時
    public void HandleRewardBasedVideoRewardedFailed(object sender, AdFailedToLoadEventArgs args)
    {
        StartCoroutine(_waitConnectReward());
    }

    // ロードに失敗した場合、30秒待ってから再ロードをする
    IEnumerator _waitConnectReward()
    {
        while (true)
        {
            yield return new WaitForSeconds(30.0f);

            // 通信ができない場合は、リロードしない
            if (Application.internetReachability != NetworkReachability.NotReachable)
            {
                RequestRewardBasedVideo();
                break;
            }


        }
    }

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/05 17:07

    ご回答ありがとうございます。勉強になりました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.63%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる