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

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

このガイドでは、Google Mobile Ads C++ SDK を使って Android アプリと iOS アプリにインタースティシャル広告を組み込む方法を説明します。

前提条件

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

アプリの作成とテストの際は、実際の実際の広告ではなく、テスト広告を使用してください。実際の広告を使用すると、アカウントが停止される可能性があります。

テスト広告を読み込むには、インタースティシャル専用のテスト専用広告ユニット ID を使用する方法をおすすめします。この ID はデバイス プラットフォームによって異なります。

  • Android: ca-app-pub-3940256099942544/1033173712
  • iOS: ca-app-pub-3940256099942544/4411468910

この ID は、すべてのリクエストに対してテスト広告を返すように構成されており、アプリのコーディング、テスト、デバッグで自由に使うことができます。なお、テスト用 ID は、アプリを公開する前に必ずご自身の広告ユニット ID に置き換えてください。

Mobile Ads SDK のテスト広告の仕組みについて詳しくは、テスト広告をご覧ください。

実装

インタースティシャル広告を組み込む主な手順は、以下のとおりです。

  1. 広告を読み込みます。
  2. コールバックを登録します。
  3. 広告を表示して、そのライフサイクル イベントを処理します。

InterstitialAd を構成する

インタースティシャル広告は InterstitialAd オブジェクトに表示されるため、アプリにインタースティシャル広告を組み込むには、まず InterstitialAd オブジェクトを作成して初期化します。

  1. アプリの C++ コードに

     #include "firebase/gma/interstial_ad.h"
    
    ヘッダーを追加します。

  2. InterstitialAd オブジェクトを宣言してインスタンス化します。

     firebase::gma::InterstitialAd* interstitial_ad;
     interstitial_ad = new firebase::gma::InterstitialAd();
    

  3. 親ビューを使用して AdParent 型にキャストして、InterstitialAd インスタンスを初期化します。親ビューは、Android Activity への JNI jobject 参照または iOS の UIView へのポインタです。

    // my_ad_parent is a jobject reference to an Android Activity or
    // a pointer to an iOS UIView.
    firebase::gma::AdParent ad_parent =
      static_cast<firebase::gma::AdParent>(my_ad_parent);
    firebase::Future<void> result = interstitial_ad->Initialize(ad_parent);
    
  4. Future を変数として保持する代わりに、InterstitialAd オブジェクトに対して InitializeLastResult() を呼び出すことで、初期化オペレーションのステータスを定期的に確認できます。これは、グローバル ゲームループで初期化プロセスを追跡する際に役立ちます。

    // Monitor the status of the future in your game loop:
    firebase::Future<void> result = interstitial_ad->InitializeLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      // Initialization completed.
      if(future.error() == firebase::gma::kAdErrorCodeNone) {
        // Initialization successful.
      } else {
        // An error has occurred.
      }
    } else {
      // Initialization on-going.
    }
    

firebase::Future の操作の詳細については、Futures を使用してメソッド呼び出しの完了ステータスをモニタリングするをご覧ください。

広告を読み込む

広告の読み込みは、InterstitialAd オブジェクトで LoadAd() メソッドを使用して行います。読み込みメソッドを使用するには、InterstitialAd オブジェクトを初期化済みで、広告ユニット ID と AdRequest オブジェクトが必要です。firebase::Future が返されます。これを使用して、読み込みオペレーションの状態と結果をモニタリングできます。

次のコードは、InterstitialAd が正常に初期化された後に広告を読み込む方法を示しています。

firebase::gma::AdRequest ad_request;
firebase::Future<firebase::gma::AdResult> load_ad_result;
load_ad_result = interstitial_ad->LoadAd(interstitial_ad_unit_id, ad_request);

コールバックに登録する

インタースティシャル広告の表示やライフサイクル イベントの通知を受け取るには、FullScreenContentListener クラスを拡張する必要があります。カスタムの FullScreenContentListener サブクラスは、InterstitialAd::SetFullScreenContentListener() メソッドで登録できます。このサブクラスは、広告の表示が成功または失敗したときや、広告が閉じられたときにコールバックを受け取ります。

次のコードは、クラスを拡張して広告に割り当てる方法を示しています。

  class ExampleFullScreenContentListener
      : public firebase::gma::FullScreenContentListener {

   public:
    ExampleFullScreenContentListener() {}

    void OnAdClicked() override {
      // This method is invoked when the user clicks the ad.
    }

    void OnAdDismissedFullScreenContent() override {
     // This method is invoked when the ad dismisses full screen content.
    }

    void OnAdFailedToShowFullScreenContent(const AdError& error) override {
      // This method is invoked when the ad failed to show full screen content.
      // Details about the error are contained within the AdError parameter.
    }

    void OnAdImpression() override {
      // This method is invoked when an impression is recorded for an ad.
    }

    void OnAdShowedFullScreenContent() override {
      // This method is invoked when the ad showed its full screen content.
    }
  };

  ExampleFullScreenContentListener* full_screen_content_listener =
    new ExampleFullScreenContentListener();
  interstitial_ad->SetFullScreenContentListener(full_screen_content_listener);

InterstitialAd は使い捨てオブジェクトです。一度インタースティシャル広告を表示した後、再度表示することはできません。FullScreenContentListenerOnAdDismissedFullScreenContent() メソッドで別のインタースティシャル広告を読み込むことをおすすめします。この方法では、前のインタースティシャル広告の表示が終了したらすぐに次のインタースティシャル広告の読み込みが開始されます。

広告を表示する

インタースティシャル広告は、アプリ操作の流れが自然に一時停止するタイミングで表示しましょう。ゲームのレベルが切り替わる合間や、ユーザーがタスクを完了した直後などが、良い例です。FullScreenContentListener は広告が全画面コンテンツが表示されたかどうかを判断するために使用できますが、Show() によって返される Future も、広告が正常に表示されたことを通知します。

  firebase::Future<void> result = interstitial_ad->Show();

ベスト プラクティス

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

補足資料

GitHub の例

Mobile Ads Garage の動画チュートリアル

成功事例

次のステップ