クリアメモリ

プログラミングやガジェットレビュー、便利なアプリケーションなど雑多に記録するブログ

【Unity】AdMobインタースティシャル広告が1回しか表示されない時の対処法

f:id:clrmemory:20171119184426p:plain

こんにちはクリアメモリです!

先日、新しく作成しているアプリに「AdMob」のインタースティシャル広告を実装しました。

 

今までのアプリでも何回か実装しているのですが、インタースティシャル広告を1度表示すると2回目に表示できなかったので、今回はその対処法を紹介します。

 

 

はじめに

 

AdMobはGoogleが配信している「スマホアプリ」に導入できる広告サービスです。

アドセンス」と同じアカウントで登録できるので、既にブログなどでアドセンス広告を出している方でスマホアプリも作っているという方は使ってみてはいかがでしょうか。

 

今回紹介する問題は、仮に「ゲームオーバーになったらAdMobのインタースティシャル広告を表示する」というような実装方法をしていた場合で説明します。

 1回目にゲームオーバーになったときはインタースティシャル広告が表示されるのですが、コンティニューなどをした後再度ゲームオーバーになったときは広告が表示されないというものでした。

  

この対処法は、AdMob広告のシステムがわかってしまえば簡単に解決できたので紹介します。

筆者はUnityを使ったアプリでAdMobインタースティシャル広告を実装しています。

 

Interstitial広告

 

まず、AdMobインタースティシャル広告のシステムを説明します。最も重要なのが「AdMobのインタースティシャル広告は1度きりで削除される」という点です。

UnityでAdMobインタースティシャル広告を実装する場合、以下のようなコードを使っていると思います。

 

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

    if (is_close_interstitial == true) {
        _interstitial.Destroy ();
    }

    // Initialize an InterstitialAd.
    _interstitial = new InterstitialAd (adUnitId);
    // Create an empty ad request.
    AdRequest request = new AdRequest.Builder ().AddTestDevice("").Build ();
    // Load the interstitial with the request.
    _interstitial.LoadAd (request);
    is_close_interstitial = false;
    }

void HandleAdClosed (object sender, System.EventArgs e)
{
    is_close_interstitial = true;
}

 

このコードを作成し、_interstitial.Show()を使うことでインタースティシャル広告を表示することができるのですが、この中に以下のようなコードがありますよね。

 

void HandleAdClosed (object sender, System.EventArgs e)
{
    is_close_interstitial = true;
}

 

このコードの内容は「インタースティシャル広告が閉じたらis_close_interstitial をtrueにする」というものです。

 

先ほどのコードの中に

 

if (is_close_interstitial == true) {
    _interstitial.Destroy ();
}

 

があるので「is_close_interstitial」がtrueになったら_interstitialが削除されます。

このことからもわかる通り「AdMobのインタースティシャル広告は1度表示されたら削除」されます。

ですので、AdMobのインタースティシャル広告を表示したい場合は取得し直す必要があります。

 

解決策

 

私は今まで「AdMobを表示するオブジェクト」をDontDestroyOnLoadを使ってシーンを跨いでも削除されないようにしていました。

このようにすることで、最初のシーンに配置することでシーンが変わってもオブジェクトが破棄されないようにしていました。

  

これが良くなかったようで、すべてのシーンにAdMobインタースティシャル広告のオブジェクトを配置したらゲームオーバーのたびに広告が呼び出されるようになりました。

 

もしすべてのシーンに配置するのが大変な場合は、フェードアウトオブジェクトやカメラなどすべてのシーンに配置されているプレハブを利用して配置すると楽かもしれません。

 

インタースティシャル広告を配置したシーンを何度もロードするようなゲームであれば今回の作業は必要ないと思います。

ですが、私が作っているゲームのようにオープニングのシーンは次回起動時までロードしないゲームでは、インタースティシャル広告を再度取得できません。

 

そういった時は今回の方法で解決できると思います。

ぜひ試してみてください。

 

まとめ

 

今回の方法を使えば、Unityアプリに実装したAdMobインタースティシャル広告を、呼び出す限り何回でも表示できるようになりました。

 

アプリ開発で広告関連を実装するのは大変ですよね。

新しく実装した広告の動作を確認するためには、毎回スマホで実機テストしなければ表示されません。

そのような時は、デバッグを何回もするのではなく検索をかけて確実な方法を探したほうが効率が良いかもしれません。

 

www.clrmemory.com

  

ではまた。

新着記事