リワード広告は、ユーザーが広告を操作することと引き換えに、アプリ内で報酬を獲得できる広告です。このガイドでは、AdMob のリワード広告を Android アプリに組み込む方法について説明します。

リワード広告は、ユーザーが広告を操作することと引き換えに、アプリ内で報酬を獲得できる広告です。このガイドでは、AdMob のリワード広告を Android アプリに組み込む方法について説明します。
前提条件
- Google Mobile Ads SDK 17.2.0 以降
- スタートガイドの手順を参照して、Google Mobile Ads SDK をインポートし、Android マニフェストを更新してください。
リワード広告のオブジェクトを作成する
リワード広告は、RewardedAd
オブジェクトによってリクエストされ、表示されます。最初のステップは、RewardedAd
をインスタンス化することです。次のコード スニペットは、Activity
の onCreate()
メソッドを使用してインスタンスを作成する方法を示しています。
import com.google.android.gms.ads.rewarded.RewardedAd; public class MainActivity extends Activity { private RewardedAd rewardedAd; @Override protected void onCreate(Bundle savedInstanceState) { ... rewardedAd = new RewardedAd(this, "ca-app-pub-3940256099942544/5224354917"); } }
コンストラクタは、以下の引数を取ります。
Activity
コンテキスト- リワード広告を読み込む際に使用する広告ユニット ID
テストでは常にテスト広告を使用する
アプリの開発やテストでは実際の広告を使用せず、必ずテスト広告を使ってください。実際の広告でテストすると、アカウントが停止される場合があります。
テスト広告は、次に示す Android リワード広告向けのテスト専用広告ユニット ID を使うと簡単に読み込むことができます。
ca-app-pub-3940256099942544/5224354917
この ID は、すべてのリクエストに対してテスト広告を返す特別な ID で、アプリのコーディング、テスト、デバッグで自由に使うことができます。なお、テスト用 ID は、アプリを公開する前に必ずご自身の広告ユニット ID に置き換えてください。
Mobile Ads SDK のテスト広告の仕組みについてさらに詳しくは、テスト広告でご確認いただけます。
広告を読み込む
リワード広告を読み込むには、RewardedAd
オブジェクトの loadAd()
メソッドを呼び出します。このメソッドは、引数として AdRequest
と RewardedAdLoadCallback
のインスタンスを取ります。
import com.google.android.gms.ads.rewarded.RewardedAd; public class MainActivity extends Activity { private RewardedAd rewardedAd; @Override protected void onCreate(Bundle savedInstanceState) { ... rewardedAd = new RewardedAd(this, "ca-app-pub-3940256099942544/5224354917"); RewardedAdLoadCallback adLoadCallback = new RewardedAdLoadCallback() { @Override public void onRewardedAdLoaded() { // Ad successfully loaded. } @Override public void onRewardedAdFailedToLoad(int errorCode) { // Ad failed to load. } }; rewardedAd.loadAd(new AdRequest.Builder().build(), adLoadCallback); } }
RewardedAdLoadCallback
の onRewardedAdLoaded()
メソッドと onRewardedAdFailedToLoad()
メソッドは、広告の読み込み操作の結果を提供します。
オーバーライド可能なメソッド | |
---|---|
onRewardedAdLoaded() |
このメソッドは、広告の読み込みが完了したときに実行されます。 |
onRewardedAdFailedToLoad() |
このメソッドは、広告の読み込みが失敗したときに呼び出されます。発生したエラーのタイプを表す errorCode パラメータを含みます。このパラメータの値は、AdRequest クラスの定数として定義された、次のいずれかの値になります。
|
広告を表示する
リワード広告をユーザーに表示する前に、リワード広告のコンテンツを視聴して報酬を受け取るかどうか、明確な選択肢をユーザーに提示する必要があります。リワード広告は、必ずユーザーの許可を受けてから表示しなければなりません。
RewardedAd
を表示するには、広告の読み込みが完了したことを isLoaded()
メソッドで確認したうえで、show()
を呼び出します。show()
メソッドは、引数として Activity
と RewardedAdCallback
のインスタンスを取ります。Activity
インスタンスは、リワード広告が表示されるアクティビティである必要があります。
上のサンプルコードのリワード広告は、以下のようにボタンの OnClickListener
で表示できます。
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (rewardedAd.isLoaded()) {
Activity activityContext = ...;
RewardedAdCallback adCallback = new RewardedAdCallback() {
public void onRewardedAdOpened() {
// Ad opened.
}
public void onRewardedAdClosed() {
// Ad closed.
}
public void onUserEarnedReward(@NonNull RewardItem reward) {
// User earned reward.
}
public void onRewardedAdFailedToShow(int errorCode) {
// Ad failed to display
}
};
rewardedAd.show(activityContext, adCallback);
} else {
Log.d("TAG", "The rewarded ad wasn't loaded yet.");
}
}
});
広告のイベント通知を受信する
show()
メソッドに渡される RewardedAdCallback
は、リワード広告のイベント通知を受け取ります。RewardedAdCallback
のオーバーライド可能なメソッドは、それぞれリワード広告のライフサイクルで生じるイベントに対応しています。たとえば、onUserEarnedReward()
メソッドを使用すると、ユーザーに報酬を提供するのに最適なタイミングを把握できます。各広告イベント メソッドについて詳しくは、以下の表をご覧ください。
オーバーライド可能なメソッド | |
---|---|
onRewardedAdOpened() |
このメソッドは、広告がデバイスの画面いっぱいに表示されると呼び出されます。 |
onRewardedAdClosed() |
このメソッドは、ユーザーが「閉じる」アイコンまたは「戻る」ボタンをタップして、リワード広告を閉じるときに呼び出されます。アプリで音声出力やゲームループを一時停止している場合は、ここで再開すると効果的です。 |
onUserEarnedReward()
|
このメソッドは、ユーザーが広告の操作に対して報酬を受け取る必要があるときに呼び出されます。広告ユニットで設定されている報酬の詳細情報を取得するには、RewardItem パラメータの getType() メソッドと getAmount() メソッドを使用します。
|
onRewardedAdFailedToShow()
|
このメソッドは、広告の表示に失敗したときに呼び出されます。発生したエラーのタイプを表す errorCode パラメータを含みます。このパラメータの値は、RewardedAdCallback クラスの定数として定義された、次のいずれかの値になります。
|
RewardedAdCallback を使用して次のリワード広告をプリロードする
RewardedAd
は使い捨てオブジェクトです。つまり、リワード広告を一度表示すると、このオブジェクトを使って他の広告を読み込むことはできません。他のリワード広告をリクエストするには、新しい RewardedAd
オブジェクトを作成します。
おすすめの方法は、RewardedAdCallback
の onRewardedAdClosed()
メソッドで別のリワード広告を読み込んでおくことです。この方法では、前のリワード広告の表示が終了したらすぐに次のリワード広告を読み込めます。
public RewardedAd createAndLoadRewardedAd() {
RewardedAd rewardedAd = new RewardedAd(this,
"ca-app-pub-3940256099942544/5224354917");
RewardedAdLoadCallback adLoadCallback = new RewardedAdLoadCallback() {
@Override
public void onRewardedAdLoaded() {
// Ad successfully loaded.
}
@Override
public void onRewardedAdFailedToLoad(int errorCode) {
// Ad failed to load.
}
};
rewardedAd.loadAd(new AdRequest.Builder().build(), adLoadCallback);
return rewardedAd;
}
@Override
public void onRewardedAdClosed() {
this.rewardedAd = createAndLoadRewardedAd();
}
複数のリワード広告を読み込む
複数のリワード広告を読み込むには、広告ごとにリワード広告のオブジェクトを作成するおよび広告を読み込むで説明されている手順を行います。次のコード スニペットは、2 つの異なる広告プレースメントに 2 つのリワード広告を読み込む方法を示しています。
package ...
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.rewarded.RewardedAd;
public class MainActivity extends Activity {
private RewardedAd gameOverRewardedAd;
private RewardedAd extraCoinsRewardedAd;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
gameOverRewardedAd = createAndLoadRewardedAd(
"ca-app-pub-3940256099942544/5224354917");
extraCoinsRewardedAd = createAndLoadRewardedAd(
"ca-app-pub-3940256099942544/5224354917");
}
public RewardedAd createAndLoadRewardedAd(String adUnitId) {
RewardedAd rewardedAd = new RewardedAd(this, adUnitId);
RewardedAdLoadCallback adLoadCallback = new RewardedAdLoadCallback() {
@Override
public void onRewardedAdLoaded() {
// Ad successfully loaded.
}
@Override
public void onRewardedAdFailedToLoad(int errorCode) {
// Ad failed to load.
}
};
rewardedAd.loadAd(new AdRequest.Builder().build(), adLoadCallback);
return rewardedAd;
}
}
よくある質問
- 初期化の呼び出しでタイムアウトは発生しますか?
- Google Mobile Ads SDK では、10 秒が経過すると、メディエーション ネットワークの初期化が完了していなくても
OnInitializationCompleteListener
が呼び出されます。 - 初期化コールバックを取得したときに、対応準備が完了していないメディエーション ネットワークはどうなりますか?
広告は、
OnInitializationCompleteListener
のコールバック内で読み込むことが推奨されています。メディエーション ネットワークの対応準備が完了していなくても、Google Mobile Ads SDK はそのネットワークに対して広告を要求します。そのため、いったんタイムアウトされても、その後に初期化が完了すれば、メディエーション ネットワークはそのセッション中に発生する後続の広告リクエストに対応することができます。MobileAds.getInitializationStatus()
を呼び出せば、アプリ セッションの間、すべてのアダプタの初期化ステータスを継続的にポーリングすることができます。- 特定のメディエーション ネットワークの対応準備が完了していない理由を確認するには、どうすればよいですか?
AdapterStatus.getDescription()
を参照すると、アダプタが広告リクエストの処理に対応できない理由を確認できます。
今後の流れ
AdMob 管理画面で独自の動画リワード広告ユニットを作成します。
次のような別の広告フォーマットを試します。