リワード広告

リワード広告では、動画広告、体験プレイ広告、アンケートを操作したユーザーにアプリ内アイテムを進呈できます。

前提条件

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

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

テスト広告を読み込む最も簡単な方法は、Android リワード広告向けのテスト専用広告ユニット ID を使用することです。

ca-app-pub-3940256099942544/5224354917

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

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

リワード広告オブジェクトを読み込む

リワード広告を読み込むには、RewardedAd クラスの静的 load() メソッドを呼び出して RewardedAdLoadCallback を渡します。これは通常、ActivityonCreate() メソッドで行われます。他の形式の読み込みコールバックと同様に、RewardedAdLoadCallbackLoadAdError を利用して、より忠実度の高いエラーの詳細を提供します。

Java

import com.google.android.gms.ads.rewarded.RewardedAd;

public class MainActivity extends Activity {
  private RewardedAd rewardedAd;
  private final String TAG = "MainActivity";

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    AdRequest adRequest = new AdRequest.Builder().build();
    RewardedAd.load(this, "ca-app-pub-3940256099942544/5224354917",
      adRequest, new RewardedAdLoadCallback() {
        @Override
        public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
          // Handle the error.
          Log.d(TAG, loadAdError.toString());
          rewardedAd = null;
        }

        @Override
        public void onAdLoaded(@NonNull RewardedAd ad) {
          rewardedAd = ad;
          Log.d(TAG, "Ad was loaded.");
        }
    });
  }
}

Kotlin

class MainActivity : AppCompatActivity() {

  private var rewardedAd: RewardedAd? = null
  private final var TAG = "MainActivity"

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    var adRequest = AdRequest.Builder().build()
    RewardedAd.load(this,"ca-app-pub-3940256099942544/5224354917", adRequest, object : RewardedAdLoadCallback() {
      override fun onAdFailedToLoad(adError: LoadAdError) {
        Log.d(TAG, adError?.toString())
        rewardedAd = null
      }

      override fun onAdLoaded(ad: RewardedAd) {
        Log.d(TAG, "Ad was loaded.")
        rewardedAd = ad
       }
    })
  }
}

FullScreenContentCallback を設定する

FullScreenContentCallback は、RewardedAd の表示に関連するイベントを処理します。RewardedAd を表示する前に、コールバックを次のように設定してください。

Java

rewardedAd.setFullScreenContentCallback(new FullScreenContentCallback() {
  @Override
  public void onAdClicked() {
    // Called when a click is recorded for an ad.
    Log.d(TAG, "Ad was clicked.");
  }

   @Override
  public void onAdDismissedFullScreenContent() {
    // Called when ad is dismissed.
    // Set the ad reference to null so you don't show the ad a second time.
    Log.d(TAG, "Ad dismissed fullscreen content.");
    rewardedAd = null;
  }

  @Override
  public void onAdFailedToShowFullScreenContent(AdError adError) {
    // Called when ad fails to show.
    Log.e(TAG, "Ad failed to show fullscreen content.");
    rewardedAd = null;
  }

  @Override
  public void onAdImpression() {
    // Called when an impression is recorded for an ad.
    Log.d(TAG, "Ad recorded an impression.");
  }

  @Override
  public void onAdShowedFullScreenContent() {
    // Called when ad is shown.
    Log.d(TAG, "Ad showed fullscreen content.");
  }
});

Kotlin

rewardedAd?.fullScreenContentCallback = object: FullScreenContentCallback() {
  override fun onAdClicked() {
    // Called when a click is recorded for an ad.
    Log.d(TAG, "Ad was clicked.")
  }

  override fun onAdDismissedFullScreenContent() {
    // Called when ad is dismissed.
    // Set the ad reference to null so you don't show the ad a second time.
    Log.d(TAG, "Ad dismissed fullscreen content.")
    rewardedAd = null
  }

  override fun onAdFailedToShowFullScreenContent(adError: AdError?) {
    // Called when ad fails to show.
    Log.e(TAG, "Ad failed to show fullscreen content.")
    rewardedAd = null
  }

  override fun onAdImpression() {
    // Called when an impression is recorded for an ad.
    Log.d(TAG, "Ad recorded an impression.")
  }

  override fun onAdShowedFullScreenContent() {
    // Called when ad is shown.
    Log.d(TAG, "Ad showed fullscreen content.")
  }
}

広告を表示する

リワード広告を表示する際、OnUserEarnedRewardListener オブジェクトを使用して報酬イベントを処理します。

Java

if (rewardedAd != null) {
  Activity activityContext = MainActivity.this;
  rewardedAd.show(activityContext, new OnUserEarnedRewardListener() {
    @Override
    public void onUserEarnedReward(@NonNull RewardItem rewardItem) {
      // Handle the reward.
      Log.d(TAG, "The user earned the reward.");
      int rewardAmount = rewardItem.getAmount();
      String rewardType = rewardItem.getType();
    }
  });
} else {
  Log.d(TAG, "The rewarded ad wasn't ready yet.");
}

Kotlin

rewardedAd?.let { ad ->
  ad.show(this, OnUserEarnedRewardListener { rewardItem ->
    // Handle the reward.
    val rewardAmount = rewardItem.amount
    val rewardType = rewardItem.type
    Log.d(TAG, "User earned the reward.")
  })
} ?: run {
  Log.d(TAG, "The rewarded ad wasn't ready yet.")
}

[省略可] サーバー側の検証(SSV)コールバックを検証する

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

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

Java

RewardedAd.load(MainActivity.this, "ca-app-pub-3940256099942544/5354046379",
    new AdRequest.Builder().build(),  new RewardedAdLoadCallback() {
  @Override
  public void onAdLoaded(RewardedAd ad) {
    Log.d(TAG, "Ad was loaded.");
    rewardedAd = ad;
    ServerSideVerificationOptions options = new ServerSideVerificationOptions
        .Builder()
        .setCustomData("SAMPLE_CUSTOM_DATA_STRING")
        .build();
    rewardedAd.setServerSideVerificationOptions(options);
  }
  @Override
  public void onAdFailedToLoad(LoadAdError loadAdError) {
      Log.d(TAG, loadAdError.toString());
      rewardedAd = null;
  }
});

Kotlin

RewardedAd.load(this, "ca-app-pub-3940256099942544/5354046379",
    AdRequest.Builder().build(), object : RewardedAdLoadCallback() {
  override fun onAdLoaded(ad: RewardedAd) {
    Log.d(TAG, "Ad was loaded.")
    rewardedInterstitialAd = ad
    val options = ServerSideVerificationOptions.Builder()
        .setCustomData("SAMPLE_CUSTOM_DATA_STRING")
        .build()
    rewardedAd.setServerSideVerificationOptions(options)
  }

  override fun onAdFailedToLoad(adError: LoadAdError) {
      Log.d(TAG, adError?.toString())
      rewardedAd = null
  }
})

カスタムのリワード文字列を設定する場合は、広告を表示する前に設定する必要があります。

よくある質問

初期化の呼び出しにタイムアウトはありますか?
10 秒が経過すると、メディエーション ネットワークの初期化が完了していなくても、Google Mobile Ads SDK は OnInitializationCompleteListener を呼び出します。
初期化コールバックを受け取ったときに、準備が完了していないメディエーション ネットワークがある場合はどうなりますか?

広告は、OnInitializationCompleteListener のコールバック内で読み込むことをおすすめします。メディエーション ネットワークの準備ができていない場合でも、Google Mobile Ads SDK はそのネットワークに広告をリクエストします。そのため、タイムアウト後にメディエーション ネットワークが初期化を完了した場合でも、そのセッションの以降の広告リクエストは引き続き処理されます。

アプリ セッション中は、MobileAds.getInitializationStatus() を呼び出すことで、引き続きすべてのアダプタの初期化ステータスをポーリングできます。

特定のメディエーション ネットワークの準備ができていない理由を調べるにはどうすればよいですか?

AdapterStatus.getDescription() は、アダプタが広告リクエストを処理できない理由を表します。

onUserEarnedReward() コールバックは、常に onAdDismissedFullScreenContent() コールバックの前に呼び出されますか?

Google 広告では、onUserEarnedReward() の呼び出しはすべて onAdDismissedFullScreenContent() の前に行われます。メディエーションを介して配信される広告の場合、コールバックの順序は第三者広告ネットワーク SDK の実装によって決定されます。報酬情報を含んだ単一のクローズ コールバックを提供する広告ネットワーク SDK の場合、メディエーション アダプタは onAdDismissedFullScreenContent() の前に onUserEarnedReward() を呼び出します。

GitHub の例

次のステップ

次のトピックをご覧ください。