インタースティシャル広告

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

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

前提条件

スタートガイドの手順を完了し、Unity アプリに Google Mobile Ads 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 引数を使用して、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 += HandleOnAdOpened;
    // Called when the ad is closed.
    this.interstitial.OnAdClosed += HandleOnAdClosed;
    // Called when the ad click caused the user to leave the application.
    this.interstitial.OnAdLeavingApplication += HandleOnAdLeavingApplication;

    // 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 HandleOnAdOpened(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleAdOpened event received");
}

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

public void HandleOnAdLeavingApplication(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleAdLeavingApplication 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 このメソッドは、ユーザーが「閉じる」アイコンまたは「戻る」ボタンをタップしてインタースティシャル広告を閉じたときに呼び出されます。音声出力やゲームループを一時停止するアプリの場合は、ここで再開すると効果的です。
OnAdLeavingApplication OnAdOpened の後にユーザーが別のアプリ(Google Play ストアなど)を起動し、現在のアプリがバックグラウンドに移動すると、このメソッドが呼び出されます。

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

InterstitialAd の使用を終了する場合は、必ず Destroy() メソッドを呼び出してから参照を削除するようにしてください。

interstitial.Destroy();

これにより、オブジェクトが使用されなくなり、占有されていたメモリを再利用できることがプラグインに通知されます。このメソッドを呼び出さないとメモリリークが発生します。

推奨事項

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

その他の参考情報

サンプル

成功事例

今後の流れ

  • AdMob 管理画面で独自のインタースティシャル広告ユニットを作成します。
  • 次のような別の広告フォーマットを試します。