インタースティシャル広告(従来版)

インタースティシャル広告は、ホストアプリのインターフェース上に表示されるフルスクリーン広告です。通常は、ゲームレベルをクリアした後の合間など、アプリの操作中に画面が切り替わるタイミングで表示されます。アプリにインタースティシャル広告が表示されると、ユーザーは広告をタップしてリンク先に移動するか、広告を閉じてアプリに戻るかを選択できます。事例紹介

このガイドでは、インタースティシャル広告を Unity アプリに組み込む方法について説明します。

前提条件

インタースティシャル広告を作成する

インタースティシャルを表示するための最初のステップは、GameObject に添付されたスクリプト内に InterstitialAd オブジェクトを作成することです。

using GoogleMobileAds.Api;
...

private InterstitialAd interstitial;

private void RequestInterstitial()
{
    #if UNITY_ANDROID
        string adUnitId = "ca-app-pub-3940256099942544/1033173712";
    #elif UNITY_IPHONE
        string adUnitId = "ca-app-pub-3940256099942544/4411468910";
    #else
        string adUnitId = "unexpected_platform";
    #endif

    // Initialize an InterstitialAd.
    this.interstitial = new InterstitialAd(adUnitId);
}

InterstitialAd のコンストラクタには次のパラメータがあります。

  • adUnitId - InterstitialAd が広告を読み込む AdMob 広告ユニットの ID。

重要なのは、プラットフォームに応じて異なる広告ユニットを使用する点です。iOS での広告リクエストには iOS 用の広告ユニットを、Android での広告リクエストには Android 用の広告ユニットを使用する必要があります。

必ずテスト広告でテストする

上記のサンプルコードには広告ユニット ID が含まれており、それを使って広告を自由にリクエストできます。この ID は、すべてのリクエストに対して実際の広告ではなくテスト広告を返すように設定されており、安全に使用できます。

ただし、AdMob 管理画面でアプリを登録し、アプリで使用する独自の広告ユニット ID を作成した後は、開発時に明示的にデバイスをテストデバイスとして設定する必要があります。これは非常に重要です。実際の広告を使ったテスト(広告をタップしなくても)は AdMob ポリシーに違反しているため、アカウント停止の原因となる場合があります。開発時に常にテスト広告を取得する方法については、テスト広告をご覧ください。

広告を読み込む

InterstitialAd がインスタンス化されたら、次のステップとして広告を読み込みます。これは、InterstitialAd クラスの loadAd() メソッドで行います。このメソッドは AdRequest 引数を取り、単一の広告リクエストに関するランタイム情報(ターゲティング情報など)を保持します。

広告の読み込み方法の例を次に示します。

using GoogleMobileAds.Api;
...
private InterstitialAd interstitial;

private void RequestInterstitial()
{
    #if UNITY_ANDROID
        string adUnitId = "ca-app-pub-3940256099942544/1033173712";
    #elif UNITY_IPHONE
        string adUnitId = "ca-app-pub-3940256099942544/4411468910";
    #else
        string adUnitId = "unexpected_platform";
    #endif

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

広告を表示する

インタースティシャル広告は、アプリ操作の流れが自然に一時停止するタイミングで表示しましょう。ゲームのステージが切り替わる合間や、ユーザーがタスクを完了した後などがその好例です。インタースティシャルを表示するには、isLoaded() メソッドを使用して読み込みが完了したことを確認してから、show() を呼び出します。

上のコードサンプルのインタースティシャル広告は、次に示すように、ゲームの最後に表示できます。

private void GameOver()
{
  if (this.interstitial.IsLoaded()) {
    this.interstitial.Show();
  }
}

広告イベント

広告の動作をさらにカスタマイズするには、広告のライフサイクルで生じるさまざまなイベント(読み込み、開始、終了など)を利用します。これらのイベントをリッスンするには、以下に示すように、適切な EventHandler にデリゲートを登録します。

using GoogleMobileAds.Api;
...
private InterstitialAd interstitial;

private void RequestInterstitial()
{
    #if UNITY_ANDROID
        string adUnitId = "ca-app-pub-3940256099942544/1033173712";
    #elif UNITY_IPHONE
        string adUnitId = "ca-app-pub-3940256099942544/4411468910";
    #else
        string adUnitId = "unexpected_platform";
    #endif

     // Initialize an InterstitialAd.
    this.interstitial = new InterstitialAd(adUnitId);

    // Called when an ad request has successfully loaded.
    this.interstitial.OnAdLoaded += HandleOnAdLoaded;
    // Called when an ad request failed to load.
    this.interstitial.OnAdFailedToLoad += HandleOnAdFailedToLoad;
    // Called when an ad is shown.
    this.interstitial.OnAdOpening += HandleOnAdOpening;
    // Called when the ad is closed.
    this.interstitial.OnAdClosed += HandleOnAdClosed;

    // Create an empty ad request.
    AdRequest request = new AdRequest.Builder().Build();
    // Load the interstitial with the request.
    this.interstitial.LoadAd(request);
}

public void HandleOnAdLoaded(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleAdLoaded event received");
}

public void HandleOnAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
    MonoBehaviour.print("HandleFailedToReceiveAd event received with message: "
                        + args.Message);
}

public void HandleOnAdOpening(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleAdOpening event received");
}

public void HandleOnAdClosed(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleAdClosed event received");
}

OnAdFailedToLoad イベントには、特別なイベント引数が含まれます。エラーを説明する Message を含む HandleAdFailedToLoadEventArgs のインスタンスを渡します。

public void HandleOnAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
    print("Interstitial failed to load: " + args.Message);
    // Handle the ad failed to load event.
}
広告イベント説明
OnAdLoaded OnAdLoaded イベントは、広告の読み込みが完了すると実行されます。
OnAdFailedToLoad OnAdFailedToLoad イベントは、広告の読み込みに失敗したときに呼び出されます。Message パラメータは、発生したエラーのタイプを表します。
OnAdOpening このメソッドは、広告がデバイスの画面いっぱいに表示されると呼び出されます。
OnAdClosed このメソッドは、ユーザーが「閉じる」アイコンまたは「戻る」ボタンをタップしてインタースティシャル広告を閉じたときに呼び出されます。アプリで音声出力やゲームループを一時停止している場合は、ここで再開すると効果的です。

インタースティシャル広告をクリーンアップする

使い終わった InterstitialAd への参照を破棄する前に、必ず Destroy() メソッドを呼び出してください。

interstitial.Destroy();

これにより、そのオブジェクトはもう使用されておらず、オブジェクトが占有していたメモリを回収しても問題ないことを、プラグインに通知できます。このメソッドを呼び出さないとメモリリークが発生します。

おすすめの方法

インタースティシャル広告がアプリに適しているかどうかをよく見極めましょう。
インタースティシャル広告は、自然な移行ポイント(画面の切り替わりなど)があるアプリに最適です。 画像の共有やゲームレベルのクリアなど、アプリ内で特定のタスクが完了したタイミングがこうした移行ポイントになります。ユーザーはアクションの中断を想定しているため、インタースティシャル広告を表示しても操作性を損ないません。アプリのワークフローのどの時点でインタースティシャル広告を表示するか、ユーザーがそれにどう反応しそうかをよく検討してください。
インタースティシャル広告を表示する際には必ずアクションを一時停止しましょう。
インタースティシャル広告には、テキスト、イメージ、動画などのさまざまな種類があります。アプリでインタースティシャル広告を表示する際に、一部のリソースの使用を一時停止して、広告がそれらのリソースを利用できるようにする必要があります。たとえば、インタースティシャル広告を表示するための呼び出しを行う際は、アプリが生成する音声出力を一時停止するようにしてください。音声の再生は、onAdClosed() イベント ハンドラで再開できます。このハンドラはユーザーが広告の操作を完了すると呼び出されます。また、負荷の大きい計算タスク(ゲームループなど)は、広告の表示中は一時的に停止することも検討してください。グラフィックの遅延や反応の遅さ、動画の乱れなどを防ぐことができます。
読み込み時間を十分に確保してください。
インタースティシャル広告を適切なタイミングで表示することも重要ですが、それだけではなくユーザーが読み込みを待つ必要もありません。show() を呼び出す前に loadAd() を呼び出して広告を事前に読み込ませておくと、表示されるタイミングになったときに、アプリの読み込みを完全に完了できます。
過度に広告を表示しないよう注意しましょう。
インタースティシャル広告の表示頻度を上げることは、収益向上の手段としては魅力的に思えるかもしれませんが、同時に、ユーザー エクスペリエンスの低下やクリック率の低下にもつながります。ユーザーがアプリを楽しめなくなるほど頻繁に広告を表示することがないようにしてください。

参考情報

サンプル

成功事例