リワード広告 - 新しい API(ベータ版)

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

リワード広告の仕組みについては、下記のデモをご覧ください。このデモでは、シンプルなゲームに組み込まれた動画リワード広告の流れを示しています。

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

前提条件

  • Google Mobile Ads SDK 17.2.0 以降
  • スタートガイドの手順を参照して、Google Mobile Ads SDK をインポートし、Android マニフェストを更新してください。

リワード広告のオブジェクトを作成する

リワード広告は、RewardedAd オブジェクトによってリクエストされ、表示されます。最初のステップは、RewardedAd をインスタンス化することです。次のコード スニペットは、ActivityonCreate() メソッドを使用してインスタンスを作成する方法を示しています。

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");
    }

}

コンストラクタは、以下の引数を取ります。

テストでは常にテスト広告を使用する

アプリの開発やテストでは実際の広告を使用せず、必ずテスト広告を使ってください。実際の広告でテストすると、アカウントが停止される場合があります。

テスト広告は、次に示す Android リワード広告向けのテスト専用広告ユニット ID を使うと簡単に読み込むことができます。

ca-app-pub-3940256099942544/5224354917

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

Mobile Ads SDK のテスト広告の仕組みについてさらに詳しくは、テスト広告でご確認いただけます。

広告を読み込む

リワード広告を読み込むには、RewardedAd オブジェクトの loadAd() メソッドを呼び出します。このメソッドは、引数として AdRequestRewardedAdLoadCallback のインスタンスを取ります。

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);
    }
}

RewardedAdLoadCallbackonRewardedAdLoaded() メソッドと onRewardedAdFailedToLoad() メソッドは、広告の読み込み操作の結果を提供します。

オーバーライド可能なメソッド
onRewardedAdLoaded() このメソッドは、広告の読み込みが完了したときに実行されます。
onRewardedAdFailedToLoad() このメソッドは、広告の読み込みが失敗したときに呼び出されます。発生したエラーのタイプを表す errorCode パラメータを含みます。このパラメータの値は、AdRequest クラスの定数として定義された、次のいずれかの値になります。
  • ERROR_CODE_INTERNAL_ERROR - 内部でエラーが発生しています(広告サーバーから無効な応答を受け取った場合など)。
  • ERROR_CODE_INVALID_REQUEST - 広告リクエストが無効です(広告ユニット ID が不正確だった場合など)。
  • ERROR_CODE_NETWORK_ERROR - ネットワーク接続が原因で広告のリクエストに失敗しました。
  • ERROR_CODE_NO_FILL - 広告リクエストは成功したものの、広告枠の不足が原因で広告が返されませんでした。

広告を表示する

リワード広告をユーザーに表示する前に、リワード広告のコンテンツを視聴して報酬を受け取るかどうか、明確な選択肢をユーザーに提示する必要があります。リワード広告は、必ずユーザーの許可を受けてから表示しなければなりません。

RewardedAd を表示するには、広告の読み込みが完了したことを isLoaded() メソッドで確認したうえで、show() を呼び出します。show() メソッドは、引数として ActivityRewardedAdCallback のインスタンスを取ります。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 クラスの定数として定義された、次のいずれかの値になります。
  • ERROR_CODE_INTERNAL_ERROR - 内部でエラーが発生しています。
  • ERROR_CODE_AD_REUSED - リワード広告はすでに 1 度表示されています。 RewardedAd は使い捨てオブジェクトであり、1 回の表示にしか使用できません。新しい広告を表示するには、RewardedAd のインスタンスを新たに生成して、読み込んでください。
  • ERROR_CODE_NOT_READY - 広告は正常に読み込まれませんでした。
  • ERROR_CODE_APP_NOT_FOREGROUND - アプリがフォアグラウンドで動作していない場合、広告は表示できません。

RewardedAdCallback を使用して次のリワード広告をプリロードする

RewardedAd は使い捨てオブジェクトです。つまり、リワード広告を一度表示すると、このオブジェクトを使って他の広告を読み込むことはできません。他のリワード広告をリクエストするには、新しい RewardedAd オブジェクトを作成します。

おすすめの方法は、RewardedAdCallbackonRewardedAdClosed() メソッドで別のリワード広告を読み込んでおくことです。この方法では、前のリワード広告の表示が終了したらすぐに次のリワード広告を読み込めます。

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() を参照すると、アダプタが広告リクエストの処理に対応できない理由を確認できます。

今後の流れ

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。