リワード広告は、ユーザーが広告を操作することと引き換えにアプリ内で報酬を獲得できるオプションを提供します。このガイドでは、Google Mobile Ads C++ SDK を使用して Android アプリと iOS アプリにリワード広告を組み込む方法について説明します。
お客様の成功事例のご紹介: ケーススタディ 1、ケーススタディ 2
前提条件
- スタートガイドを完了している。
- (Android のみ)JNI
jobject
参照に関する経験(Android JNI に関するヒントを参照)。
必ずテスト広告でテストする
アプリの作成とテストの際は、実際の実際の広告ではなく、テスト広告を使用してください。実際の広告を使用すると、アカウントが停止される可能性があります。
テスト広告を読み込むには、リワード広告向けのテスト専用広告ユニット ID を使用するのが最も簡単な方法です。この ID はデバイス プラットフォームによって異なります。
- Android:
ca-app-pub-3940256099942544/5224354917
- iOS:
ca-app-pub-3940256099942544/1712485313
この ID は、すべてのリクエストに対してテスト広告を返すように構成されており、アプリのコーディング、テスト、デバッグで自由に使うことができます。なお、テスト用 ID は、アプリを公開する前に必ずご自身の広告ユニット ID に置き換えてください。
Mobile Ads SDK のテスト広告の仕組みについて詳しくは、テスト広告をご覧ください。
実装
リワード広告を組み込む主な手順は、以下のとおりです。
- 広告を読み込みます。
- コールバックを登録します。
- 広告を表示して報酬イベントを処理します。
RewardedAd
を構成する
リワード広告は RewardedAd
オブジェクトに表示されるため、アプリにリワード広告を組み込むには、まず RewardedAd
のインスタンスを作成して初期化する必要があります。
アプリの C++ コードに
#include "firebase/gma/rewarded_ad.h"
ヘッダーを追加します。RewardedAd
オブジェクトを宣言してインスタンス化します。firebase::gma::RewardedAd* rewarded_ad; rewarded_ad = new firebase::gma::RewardedAd();
親ビューを使用して
AdParent
型にキャストして、RewardedAd
インスタンスを初期化します。親ビューは、AndroidActivity
への JNIjobject
参照または iOS のUIView
へのポインタです。// my_ad_parent is a jobject reference to an Android Activity or // a pointer to an iOS UIView. firebase::gma::AdParent ad_parent = static_cast<firebase::gma::AdParent>(my_ad_parent); firebase::Future<void> result = rewarded_ad->Initialize(ad_parent);
Future を変数として保持する代わりに、
RewardedAd
オブジェクトに対してInitializeLastResult()
を呼び出すことで、初期化オペレーションのステータスを定期的に確認できます。これは、グローバル ゲームループで初期化プロセスを追跡する際に役立ちます。// Monitor the status of the future in your game loop: firebase::Future<void> result = rewarded_ad->InitializeLastResult(); if (result.status() == firebase::kFutureStatusComplete) { // Initialization completed. if(future.error() == firebase::gma::kAdErrorCodeNone) { // Initialization successful. } else { // An error has occurred. } } else { // Initialization on-going. }
firebase::Future
の操作の詳細については、Futures を使用してメソッド呼び出しの完了ステータスをモニタリングするをご覧ください。
広告を読み込む
広告の読み込みは、RewardedAd
オブジェクトで LoadAd()
メソッドを使用して行います。読み込みメソッドを使用するには、RewardedAd
オブジェクトを初期化済みで、広告ユニット ID と AdRequest
オブジェクトが必要です。firebase::Future
が返されます。これを使用して、読み込みオペレーションの状態と結果をモニタリングできます。
次のコードは、RewardedAd
が正常に初期化された後に広告を読み込む方法を示しています。
firebase::gma::AdRequest ad_request;
firebase::Future<firebase::gma::AdResult> load_ad_result;
load_ad_result = rewarded_ad->LoadAd(rewarded_ad_unit_id, ad_request);
コールバックに登録する
リワード広告の表示やライフサイクル イベントの通知を受け取るには、FullScreenContentListener
クラスを拡張する必要があります。カスタムの FullScreenContentListener
サブクラスは、RewardedAd::SetFullScreenContentListener()
メソッドで登録できます。このサブクラスは、広告の表示が成功または失敗したときや、広告が閉じられたときにコールバックを受け取ります。
次のコードは、クラスを拡張して広告に割り当てる方法を示しています。
class ExampleFullScreenContentListener : public firebase::gma::FullScreenContentListener { public: ExampleFullScreenContentListener() {} void OnAdClicked() override { // This method is invoked when the user clicks the ad. } void OnAdDismissedFullScreenContent() override { // This method is invoked when the ad dismisses full screen content. } void OnAdFailedToShowFullScreenContent(const AdError& error) override { // This method is invoked when the ad failed to show full screen content. // Details about the error are contained within the AdError parameter. } void OnAdImpression() override { // This method is invoked when an impression is recorded for an ad. } void OnAdShowedFullScreenContent() override { // This method is invoked when the ad showed its full screen content. } }; ExampleFullScreenContentListener* example_full_screen_content_listener = new ExampleFullScreenContentListener(); rewarded_ad->SetFullScreenContentListener(example_full_screen_content_listener);
RewardedAd
は使い捨てオブジェクトです。つまり、リワード広告を一度表示すると、再度表示することはできません。FullScreenContentListener
の OnAdDismissedFullScreenContent()
メソッドで別のリワード広告を読み込み、前のリワード広告の表示が終了したらすぐに次のリワード広告の読み込みを開始することをおすすめします。
広告を表示して報酬イベントを処理する
リワード広告をユーザーに表示する前に、報酬と引き換えにリワード広告のコンテンツを視聴するかを選択する明確な選択肢をユーザーに提示する必要があります。リワード広告は、常にユーザーの選択に応じて表示されるようにする必要があります。
広告を表示する際には、ユーザーへの報酬を処理する UserEarnedReward
オブジェクトを指定する必要があります。
次のコードは、RewardedAd
を表示する方法を示しています。
// A simple listener track UserEarnedReward events.
class ExampleUserEarnedRewardListener :
public firebase::gma::UserEarnedRewardListener {
public:
ExampleUserEarnedRewardListener() { }
void OnUserEarnedReward(const firebase::gma::AdReward& reward) override {
// Reward the user!
}
};
ExampleUserEarnedRewardListener* user_earned_reward_listener =
new ExampleUserEarnedRewardListener();
firebase::Future<void> result = rewarded_ad->Show(user_earned_reward_listener);
よくある質問
- 初期化の呼び出しでタイムアウトは発生しますか?
- メディエーション ネットワークの初期化が完了していなくても、Google Mobile Ads C++ SDK は
Initialize()
から返されたfirebase::Future
を 10 秒後に完了します。 - 初期化コールバックを取得したときに、対応準備が完了していないメディエーション ネットワークはどうなりますか?
広告の読み込みは、SDK の初期化が完了した後に行うことをおすすめします。メディエーション ネットワークの対応準備が完了していなくても、Google Mobile Ads C++ SDK はそのネットワークに対して広告を要求します。そのため、メディエーション ネットワークがタイムアウト後に初期化を完了した場合でも、そのセッションでの以降の広告リクエストには引き続き対応できます。
GetInitializationStatus()
を呼び出すことで、アプリ セッションの間、すべてのアダプタの初期化ステータスを引き続きポーリングできます。- 特定のメディエーション ネットワークの対応準備が完了していない理由を確認するには、どうすればよいですか?
AdapterStatus.description()
は、アダプタが広告リクエストの処理に対応できない理由を示します。ロギング メディエーション アダプタのステータスの例については、GitHub のサンプル クイックスタート アプリのソースコードをご覧ください。
参考情報
GitHub の例
- GitHub でクイックスタート アプリのサンプルのソースコードを表示する。