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

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

このガイドでは、インタースティシャル広告を 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 が含まれ、これを使って自由に広告をリクエストできます。これは個々のリクエストに対して実際の広告ではなくテスト広告を返すよう特別に設定されており、安全に使用できます。

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

広告を読み込む

InterstitialAd がインスタンス化された後は、次のステップとして広告を読み込みます。これは、InterstitialAd クラスの loadAd() メソッドで行います。そのためには AdRequest 引数を使用して、1 つの広告リクエストに関するランタイムの情報(ターゲティング情報など)を保持しておく必要があります。

以下は、広告を読み込む方法の例です。

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 イベントには特別なイベント引数が含まれます。このイベントが渡す HandleAdFailedToLoadEventArgs のインスタンスには、エラーについて説明する Message が含まれます。

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() を呼び出すことで、表示される前の段階でインタースティシャル広告の読み込みを完了させることができます。
過度に広告を表示しないよう注意しましょう。
インタースティシャル広告の表示頻度を増やすことで収益の向上が見込める一方、ユーザー エクスペリエンスが損なわれ、クリック率の低下につながります。ユーザーがアプリを楽しめなくなるほど頻繁に広告を表示しないでください。

参考情報

サンプル

成功事例