アプリ起動時広告を設定する

学びます

アプリ起動時広告は、アプリの読み込み画面を収益化することを望むパブリッシャー様を対象とした広告フォーマットです。この広告は、ユーザーがアプリをフォアグラウンドに移動すると表示され、いつでも閉じることができます。

詳しくは、アプリ起動時広告のガイドラインをご覧ください。

このガイドでは、アプリ起動時広告を Android アプリに統合する方法について説明します。

始める前に

続行する前に、次のことを実施してください。

  • GMA Next-Gen SDK を設定します。
  • テスト用のアプリ起動時広告ユニット ID ca-app-pub-3940256099942544/9257395921 を使用します。
    • アプリの作成とテストでは、配信中の実際の広告ではなく、必ずテスト広告を使用してください。テスト広告ユニット ID を使用しない場合、Google はアカウントを一時停止することがあります。
    • アプリを公開する前に、この ID を広告ユニット ID に置き換えてください。
    • GMA Next-Gen SDK のテスト広告について詳しくは、テスト広告を有効にするをご覧ください。

広告の事前読み込みについて

GMA Next-Gen SDK での広告のプリロードにより、広告の読み込みとキャッシュ保存が自動化されます。

広告のプリロードには次のようなメリットがあります。

  • 参照管理: 広告が表示されるまで参照を維持します。
  • 自動再読み込み: キャッシュから広告が取得されたときに、新しい広告を読み込みます。
  • 管理された再試行: 広告の読み込みに失敗した場合に、新しい広告を読み込みます。
  • 有効期限の処理: 有効期限が切れる前に広告を更新します。
  • キャッシュの最適化: 最優先の広告を配信するためにキャッシュの順序を最適化します。

広告のプリロードを開始する

広告のプリロードを開始するには、アプリの起動時に startPreload() メソッドを 1 回呼び出します。startPreload() メソッドを呼び出すと、GMA Next-Gen SDK は自動的に広告をプリロードし、プリロードされた構成のリクエストが失敗した場合は再試行します。

次の例は、広告のプリロードを開始する方法を示しています。

Kotlin

private fun startPreloading(adUnitId: String) {
  val adRequest = AdRequest.Builder(adUnitId).build()
  val preloadConfig = PreloadConfiguration(adRequest)
  AppOpenAdPreloader.start(adUnitId, preloadConfig)
}

Java

private void startPreloading(String adUnitId) {
  AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
  PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest);
  AppOpenAdPreloader.start(adUnitId, preloadConfig);
}

AD_UNIT_ID は、実際の広告ユニット ID に置き換えてください。

前の例では、広告ユニット ID をプリロード ID として使用する方法を示しています。プリロード ID は、広告のプリロード構成を識別するために作成する文字列識別子です。アプリで同じ広告ユニット ID に対して複数のターゲティング構成が必要な場合は、カスタム文字列識別子を渡します。

プリロードされた広告を取得して表示する

広告を表示する場合は、pollAd() メソッドを呼び出します。GMA Next-Gen SDK は、利用可能な広告を取得し、次の広告をバックグラウンドで自動的にプリロードします。表示できる広告がない場合、GMA Next-Gen SDK は広告を返しません。

利用可能な広告オブジェクトがある場合は、show メソッドを呼び出して広告を表示します。次の例は、プリロードされた広告を取得して表示する方法を示しています。

Kotlin

private fun pollAndShowAd(activity: Activity, adUnitId: String) {
  // Polling returns the next available ad and loads another ad in the background.
  val ad = AppOpenAdPreloader.pollAd(adUnitId)
  if (ad == null) {
    Log.e(TAG, "App open ad is not available.")
    return
  }

  // Interact with the ad object as needed.
  Log.d(TAG, "App open ad response info: ${ad.getResponseInfo()}")
  ad.adEventCallback =
    object : AppOpenAdEventCallback {
      override fun onAdImpression() {
        Log.d(TAG, "App open ad recorded an impression.")
      }
    }
  ad.show(activity)
}

Java

private void pollAndShowAd(Activity activity, String adUnitId) {
  // Polling returns the next available ad and loads another ad in the background.
  AppOpenAd ad = AppOpenAdPreloader.pollAd(adUnitId);

  // Interact with the ad object as needed.
  if (ad == null) {
    Log.e(TAG, "App open ad is not available.");
    return;
  }

  Log.d(TAG, "App open ad response info: " + ad.getResponseInfo());
  ad.setAdEventCallback(
      new AppOpenAdEventCallback() {
        @Override
        public void onAdImpression() {
          Log.d(TAG, "App open ad recorded an impression.");
        }
      });

  // Show the ad.
  ad.show(activity);
}

広告を表示する準備が整うまでは、pollAd() メソッドを呼び出さないでください。広告レスポンス情報を表示せずに読み取るには、レスポンス情報を読み取るをご覧ください。

広告イベントをリッスンする

広告を表示する前に、広告イベントをリッスンします。次の例は、広告イベントのコールバックを登録する方法を示しています。

Kotlin

private fun listenToAdEvents() {
  // Listen for ad events.
  val ad = appOpenAd
  if (ad == null) {
    Log.e(TAG, "App open ad is not ready yet.")
    return
  }

  ad.adEventCallback =
    object : AppOpenAdEventCallback {
      override fun onAdShowedFullScreenContent() {
        // App open ad did show.
      }

      override fun onAdDismissedFullScreenContent() {
        // App open ad did dismiss.
        appOpenAd = null
      }

      override fun onAdFailedToShowFullScreenContent(
        fullScreenContentError: FullScreenContentError
      ) {
        // App open ad failed to show.
        Log.e(TAG, "App open ad failed to show: ${fullScreenContentError.message}")
      }

      override fun onAdImpression() {
        // App open ad did record an impression.
      }

      override fun onAdClicked() {
        // App open ad did record a click.
      }
    }
}

Java

private void listenToAdEvents() {
  // Listen for ad events.
  if (appOpenAd == null) {
    Log.e(TAG, "App open ad is not ready yet.");
    return;
  }

  appOpenAd.setAdEventCallback(
      new AppOpenAdEventCallback() {
        @Override
        public void onAdShowedFullScreenContent() {
          // App open ad did show.
        }

        @Override
        public void onAdDismissedFullScreenContent() {
          // App open ad did dismiss.
          appOpenAd = null;
        }

        @Override
        public void onAdFailedToShowFullScreenContent(
            @NonNull FullScreenContentError fullScreenContentError) {
          // App open ad failed to show.
          Log.e(TAG, "App open ad failed to show: " + fullScreenContentError.getMessage());
        }

        @Override
        public void onAdImpression() {
          // App open ad did record an impression.
        }

        @Override
        public void onAdClicked() {
          // App open ad did record a click.
        }
      });
}

省略可: プリロード イベントをリッスンする

広告のプリロードを開始したら、プリロード イベントを登録して、広告のプリロードが成功したとき、プリロードに失敗したとき、広告キャッシュがなくなったときに通知を受け取ります。

次の例は、プリロード広告イベントを登録する方法を示しています。

Kotlin

private fun startPreloadingWithCallback(adUnitId: String) {
  val preloadCallback =
    object : PreloadCallback {
      override fun onAdFailedToPreload(preloadId: String, adError: LoadAdError) {
        Log.d(TAG, "App open preload ad $preloadId failed to load with error: ${adError.message}")
      }

      override fun onAdsExhausted(preloadId: String) {
        Log.i(TAG, "App open preload ad $preloadId is not available")
      }

      override fun onAdPreloaded(preloadId: String, responseInfo: ResponseInfo) {
        Log.i(TAG, "App open preload ad $preloadId is available")
      }
    }
  val adRequest = AdRequest.Builder(adUnitId).build()
  val preloadConfig = PreloadConfiguration(adRequest)
  AppOpenAdPreloader.start(adUnitId, preloadConfig, preloadCallback)
}

Java

private void startPreloadingWithCallback(String adUnitId) {
  PreloadCallback preloadCallback =
      new PreloadCallback() {
        @Override
        public void onAdFailedToPreload(@NonNull String preloadId, @NonNull LoadAdError adError) {
          Log.d(
              TAG,
              String.format(
                  "App open preload ad %s failed to load with error: %s",
                  preloadId, adError.getMessage()));
        }

        @Override
        public void onAdsExhausted(@NonNull String preloadId) {
          Log.i(TAG, String.format("App open preload ad %s is not available", preloadId));
        }

        @Override
        public void onAdPreloaded(@NonNull String preloadId, @NonNull ResponseInfo responseInfo) {
          Log.i(TAG, String.format("App open preload ad %s is available", preloadId));
        }
      };
  AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
  PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest);
  AppOpenAdPreloader.start(adUnitId, preloadConfig, preloadCallback);
}

広告の読み込みに失敗すると、GMA Next-Gen SDK は自動的に広告をプリロードし、プリロードされた構成のリクエストの失敗を再試行します。

省略可: 広告の利用可能性を確認する

広告が利用可能かどうかを確認する必要がある場合は、広告の利用可能性を確認します。次の例は、プリロードされた広告が利用可能かどうかを確認する方法を示しています。

Kotlin

private fun isAdAvailable(adUnitId: String): Boolean {
  return AppOpenAdPreloader.isAdAvailable(adUnitId)
}

Java

private boolean isAdAvailable(String adUnitId) {
  return AppOpenAdPreloader.isAdAvailable(adUnitId);
}

省略可: バッファサイズを設定する

バッファサイズは、メモリに保持されるプリロードされた広告の数を制御します。デフォルトでは、Google はメモリ消費量と広告配信のレイテンシのバランスを取るようにバッファサイズを最適化します。カスタム バッファサイズを設定して、メモリに保持される広告の数を増やすことができます。バッファサイズは最大 4 にすることをおすすめします。

次の例は、プリロードされた広告のバッファサイズを 4 に設定する方法を示しています。

Kotlin

private fun setBufferSize(adUnitId: String) {
  val adRequest = AdRequest.Builder(adUnitId).build()
  // Four is the recommended maximum buffer size.
  val preloadConfig = PreloadConfiguration(adRequest, bufferSize = 4)
  AppOpenAdPreloader.start(adUnitId, preloadConfig)
}

Java

private void setBufferSize(String adUnitId) {
  AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
  // Four is the recommended maximum buffer size.
  PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest, 4);
  AppOpenAdPreloader.start(adUnitId, preloadConfig);
}

プリロード キャッシュの上限

GMA Next-Gen SDK は、すべての広告ユニットとプリロード ID にわたるプリロードされた広告の総数にアプリ全体の制限を適用します。

  • デフォルトの上限: Google は最大 6 個のプリロードされた広告をメモリに保持します。この上限は、すべての形式とプリロード ID で共有されます。
  • プリロード ID ごとに 2 ~ 3 のバッファサイズを維持することをおすすめします。

省略可: 広告のプリロードを停止する

セッションで特定のプリロード ID の広告を再度表示する必要がない場合は、広告のプリロードを停止できます。特定のプリロード ID の広告の読み込みを停止するには、プリロード ID を指定して destroy() メソッドを呼び出します。destroy() メソッドを呼び出すと、プリロード ID に関連付けられているプリロードされた広告がすべてキャッシュから削除されます。

次の例は、広告のプリロードを停止する方法を示しています。

Kotlin

private fun stopPreloading(adUnitId: String) {
  // Stops the preloading and destroy preloaded ads.
  AppOpenAdPreloader.destroy(adUnitId)
}

Java

private void stopPreloading(String adUnitId) {
  // Stops the preloading and destroy preloaded ads.
  AppOpenAdPreloader.destroy(adUnitId);
}

省略可: レスポンス情報を読み取る

キャッシュから広告を削除せずに、次にプリロードされる広告のレスポンス情報を読み取ります。

次の例は、次のプリロードされた広告レスポンス情報を読み取る方法を示しています。

Kotlin

val responseInfo = AppOpenAdPreloader.peekAdResponseInfo(preloadId)
if (responseInfo == null) {
  Log.e(TAG, "Failed to peek ad response info.")
  return
}

Log.d(TAG, "Peeked ad response ID: ${responseInfo.responseId}")

Java

ResponseInfo responseInfo = AppOpenAdPreloader.peekAdResponseInfo(preloadId);
if (responseInfo == null) {
  Log.e(TAG, "Failed to peek ad response info.");
  return;
}

Log.d(TAG, "Peeked ad response ID: " + responseInfo.getResponseId());

コールド スタートと読み込み画面

コールド スタートは、アプリがゼロから起動するときに発生します。たとえば、ユーザーが初めてアプリを開くときや、メモリの強制終了後にアプリを開くときです。コールド スタートでは、直ちに表示することのできる読み込み済みのアプリ起動時広告がありません。

広告リクエストの遅延により、アプリ起動時広告が表示される前にユーザーがアプリを操作する可能性があります。ユーザー エクスペリエンスの低下を防ぐため、コールド スタートでアプリ起動時広告を表示する場合は、アプリのアセットの読み込み中に読み込み画面からのみ表示してください。アセットの読み込みが完了し、広告が読み込まれる前にユーザーがメイン コンテンツに到達した場合は、広告を表示しないでください。

バックグラウンド スレッドでアプリアセットを読み込み、広告の表示中に読み込みが継続されるようにします。

ベスト プラクティス

アプリ起動時広告に関するベスト プラクティスは次のとおりです。

  • アプリ起動時広告を初めて表示するのは、ユーザーがアプリを数回起動した後のみにする。
  • アプリ起動時広告は、ユーザーがアプリの読み込みを待っている間のみ表示します。
  • 広告が表示されている間に読み込み画面の読み込みが完了した場合は、広告が閉じられたときのコールバック メソッドで読み込み画面を閉じます。