リワード インタースティシャル広告を設定する

次世代 SDK

プラットフォームを選択: Android iOS Unity Flutter Android(レガシー)

リワード インタースティシャル広告は、アプリの画面が変わる自然なタイミングで自動的に表示される広告に対して報酬を提供できるフォーマットです。リワード広告とは異なり、ユーザーはリワード インタースティシャル広告を表示するためにオプトインする必要はありません。

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

始める前に

続行する前に、次の操作を行います。

  • を設定するGMA Next-Gen SDK
  • テスト用のリワード インタースティシャル広告ユニット ID /21775744923/example/rewarded-interstitial を使用する。
    • アプリの開発とテストでは実際の広告ではなく、必ずテスト広告を使ってください。実際の広告を使用すると、アカウントが停止される可能性があります。
    • アプリを公開する前に、この ID を広告ユニット ID に置き換えてください。
    • GMA Next-Gen SDK テスト広告について詳しくは、 テスト広告を有効にするをご覧ください。

広告のプリロードについて

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

広告のプリロードには次の利点があります。

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

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

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

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

Kotlin

// Call start() once after SDK initialization.
// Preload only one ad unit per format to optimize performance.
val adRequest = AdRequest.Builder(adUnitId).build()
val preloadConfig = PreloadConfiguration(adRequest)
RewardedInterstitialAdPreloader.start(adUnitId, preloadConfig)

Java

// Call start() once after SDK initialization.
// Preload only one ad unit per format to optimize performance.
AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest);
RewardedInterstitialAdPreloader.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 = RewardedInterstitialAdPreloader.pollAd(adUnitId)
  if (ad == null) {
    Log.e(TAG, "Rewarded interstitial ad is not available.")
    return
  }

  // Interact with the ad object as needed.
  Log.d(TAG, "Rewarded interstitial ad response info: ${ad.getResponseInfo()}")
  ad.adEventCallback =
    object : RewardedInterstitialAdEventCallback {
      override fun onAdImpression() {
        Log.d(TAG, "Rewarded interstitial ad recorded an impression.")
      }
    }
  ad.show(activity) { rewardItem -> Log.d(TAG, "User earned reward: ${rewardItem.amount}") }
}

Java

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

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

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

  // Show the ad.
  ad.show(
      activity,
      rewardItem -> {
        Log.d(TAG, "User earned reward: " + rewardItem.getAmount());
      });
}

広告を表示する準備ができるまで、pollAd メソッドの呼び出しは避けてください。広告を表示せずに広告レスポンス情報を読み取るには、 レスポンス情報を読み取るをご覧ください。

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

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

Kotlin

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

  ad.adEventCallback =
    object : RewardedInterstitialAdEventCallback {
      override fun onAdShowedFullScreenContent() {
        // Rewarded interstitial ad did show.
      }

      override fun onAdDismissedFullScreenContent() {
        // Rewarded interstitial ad did dismiss.
        rewardedInterstitialAd = null
      }

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

      override fun onAdImpression() {
        // Rewarded interstitial ad did record an impression.
      }

      override fun onAdClicked() {
        // Rewarded interstitial ad did record a click.
      }
    }
}

Java

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

  rewardedInterstitialAd.setAdEventCallback(
      new RewardedInterstitialAdEventCallback() {
        @Override
        public void onAdShowedFullScreenContent() {
          // Rewarded interstitial ad did show.
        }

        @Override
        public void onAdDismissedFullScreenContent() {
          // Rewarded interstitial ad did dismiss.
          rewardedInterstitialAd = null;
        }

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

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

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

任意: サーバーサイド認証(SSV)コールバックを検証する

アプリでサーバーサイド認証 コールバックに追加データが必要な場合は、リワード インタースティシャル広告のカスタムデータ機能を使用します。リワード インタースティシャル広告オブジェクトに設定されている文字列値はすべて、SSV コールバックの custom_data クエリ パラメータに渡されます。カスタムデータ値が設定されていない場合、custom_data クエリ パラメータ値は SSV コールバックに存在しません。

次のコードサンプルは、広告を表示する前に、リワード インタースティシャル広告オブジェクトにカスタムデータを設定する方法を示しています。

Kotlin

RewardedInterstitialAd.load(
  context,
  AD_UNIT_ID,
  AdRequest.Builder().build(),
  object : RewardedInterstitialAdLoadCallback() {
    override fun onAdLoaded(ad: RewardedInterstitialAd) {
      rewardedInterstitialAd = ad
      val options =
        ServerSideVerificationOptions.Builder().setCustomData("SAMPLE_CUSTOM_DATA_STRING").build()
      rewardedInterstitialAd?.setServerSideVerificationOptions(options)
    }
  },
)

Java

RewardedInterstitialAd.load(
    context,
    AD_UNIT_ID,
    new AdRequest.Builder().build(),
    new RewardedInterstitialAdLoadCallback() {
      @Override
      public void onAdLoaded(RewardedInterstitialAd ad) {
        rewardedInterstitialAd = ad;
        ServerSideVerificationOptions options =
            new ServerSideVerificationOptions.Builder()
                .setCustomData("SAMPLE_CUSTOM_DATA_STRING")
                .build();
        rewardedInterstitialAd.setServerSideVerificationOptions(options);
      }
    });

SAMPLE_CUSTOM_DATA_STRING は、実際のカスタムデータに置き換えてください。

任意: プリロード イベントをリッスンする

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

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

Kotlin

val preloadCallback =
  // [Important] Don't call ad preloader start() or pollAd() within the PreloadCallback.
  object : PreloadCallback {
    override fun onAdFailedToPreload(preloadId: String, adError: LoadAdError) {
      Log.d(
        TAG,
        "Rewarded interstitial preload ad $preloadId failed to load with error: ${adError.message}",
      )
    }

    override fun onAdsExhausted(preloadId: String) {
      Log.i(TAG, "Rewarded interstitial preload ad $preloadId is not available")
      // [Important] Don't call ad preloader start() or pollAd() from onAdsExhausted.
    }

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

Java

PreloadCallback preloadCallback =
    // [Important] Don't call ad preloader start() or pollAd() within the PreloadCallback.
    new PreloadCallback() {
      @Override
      public void onAdFailedToPreload(@NonNull String preloadId, @NonNull LoadAdError adError) {
        Log.d(
            TAG,
            String.format(
                "Rewarded interstitial preload ad %s failed to load with error: %s",
                preloadId, adError.getMessage()));
        // [Optional] Get the error response info for additional details.
        // ResponseInfo responseInfo = adError.getResponseInfo();
      }

      @Override
      public void onAdsExhausted(@NonNull String preloadId) {
        Log.i(TAG, "Rewarded interstitial preload ad " + preloadId + " is not available");
        // [Important] Don't call ad preloader start() or pollAd() from onAdsExhausted.
      }

      @Override
      public void onAdPreloaded(@NonNull String preloadId, @NonNull ResponseInfo responseInfo) {
        Log.i(TAG, "Rewarded interstitial preload ad " + preloadId + " is available");
      }
    };
AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest);
RewardedInterstitialAdPreloader.start(adUnitId, preloadConfig, preloadCallback);

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

任意: 広告の利用可否を確認する

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

Kotlin

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

Java

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

任意: バッファサイズを設定する

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

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

Kotlin

val adRequest = AdRequest.Builder(adUnitId).build()
// Maintain small or default buffer size unless rapid transitions are expected.
val preloadConfig = PreloadConfiguration(adRequest, bufferSize = 4)
RewardedInterstitialAdPreloader.start(adUnitId, preloadConfig)

Java

// Maintain small or default buffer size unless rapid transitions are expected.
AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest, 4);
RewardedInterstitialAdPreloader.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.
  RewardedInterstitialAdPreloader.destroy(adUnitId)
}

Java

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

任意: レスポンス情報を読み取る

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

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

Kotlin

val responseInfo = RewardedInterstitialAdPreloader.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 = RewardedInterstitialAdPreloader.peekAdResponseInfo(preloadId);
if (responseInfo == null) {
  Log.e(TAG, "Failed to peek ad response info.");
  return;
}

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