インタースティシャル広告は、ユーザーが閉じるまでアプリのインターフェース上に全画面表示される広告です。通常は、次のアクティビティに移行する前や、ゲームレベルをクリアした後の合間など、アプリの操作中に画面が切り替わるタイミングで表示されます。アプリにインタースティシャル広告が表示されると、ユーザーは広告をタップしてリンク先 URL に移動するか、広告を閉じてアプリに戻るかを選択できます。事例紹介
このガイドでは、Google Mobile Ads C++ SDK を使用してインタースティシャル広告を Android および iOS アプリに組み込む方法を説明します。
Prerequisites
- スタートガイドの手順を完了し、
- (Android のみ)
jobject
の JNI リファレンスの操作に精通していること(Android の JNI のヒントをご覧ください)。
常にテスト広告でテストする
アプリを作成してテストする際は、実際の本番環境広告ではなく、テスト広告を使用してください。実際の広告を使用すると、アカウントが停止される可能性があります。
テスト広告を読み込む際は、次に示すデバイスのプラットフォームごとに、専用のテスト広告ユニット ID を使うと便利です。
- Android:
ca-app-pub-3940256099942544/1033173712
- iOS:
ca-app-pub-3940256099942544/4411468910
この ID は、すべてのリクエストに対してテスト広告を返す特別な ID で、アプリのコーディング、テスト、デバッグで自由に使うことができます。なお、このテスト用 ID は、アプリを公開する前に必ずご自身の広告ユニット ID に置き換えてください。
Mobile Ads SDK のテスト広告の仕組みについて詳しくは、テスト広告をご覧ください。
実装
インタースティシャル広告を組み込む主な手順は、以下のとおりです。
- 広告を読み込みます。
- コールバックを登録する
- 広告を表示して、そのライフサイクル イベントを処理します。
InterstitialAd
を構成する
インタースティシャル広告は InterstitialAd
オブジェクトで表示されるため、インタースティシャル広告をアプリに統合するための最初のステップは、InterstitialAd
オブジェクトの作成と初期化です。
アプリの C++ コードに次のヘッダーを追加します。
#include "firebase/gma/interstial_ad.h"
InterstitialAd
オブジェクトを宣言してインスタンス化します。firebase::gma::InterstitialAd* interstitial_ad; interstitial_ad = new firebase::gma::InterstitialAd();
親ビューを
AdParent
型にキャストして、InterstitialAd
インスタンスを初期化します。親ビューは、AndroidActivity
への JNI 参照または iOSUIView
へのポインタです。jobject
// 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 = interstitial_ad->Initialize(ad_parent);
Future を変数として保持する代わりに、
InterstitialAd
オブジェクトに対してInitializeLastResult()
を呼び出すことで、初期化オペレーションのステータスを定期的に確認できます。これは、グローバル ゲームループで初期化プロセスを追跡するのに役立ちます。// Monitor the status of the future in your game loop: firebase::Future<void> result = interstitial_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
の操作について詳しくは、Future を使用してメソッド呼び出しの完了ステータスをモニタリングするをご覧ください。
広告を読み込む
広告の読み込みは、InterstitialAd
オブジェクトで LoadAd()
メソッドを使用して行います。読み込みメソッドでは、InterstitialAd
オブジェクトを初期化し、広告ユニット ID と AdRequest
オブジェクトが必要です。読み込みオペレーションの状態と結果のモニタリングに使用できる firebase::Future
が返されます。
次のコードは、InterstitialAd
が正常に初期化された後に広告を読み込む方法を示しています。
firebase::gma::AdRequest ad_request;
firebase::Future<firebase::gma::AdResult> load_ad_result;
load_ad_result = interstitial_ad->LoadAd(interstitial_ad_unit_id, ad_request);
コールバックを登録する
インタースティシャル広告の表示イベントとライフサイクル イベントの通知を受け取るには、FullScreenContentListener
クラスを拡張する必要があります。カスタムの FullScreenContentListener
サブクラスは、InterstitialAd::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* full_screen_content_listener = new ExampleFullScreenContentListener(); interstitial_ad->SetFullScreenContentListener(full_screen_content_listener);
InterstitialAd
は使い捨てオブジェクトです。つまり、インタースティシャル広告を一度表示すると、再度表示することはできません。おすすめの方法は、FullScreenContentListener
の OnAdDismissedFullScreenContent()
メソッドで別のインタースティシャル広告を読み込んでおくことです。これにより、前のインタースティシャル広告が閉じられた直後に次のインタースティシャル広告の読み込みを開始できます。
広告を表示する
インタースティシャル広告は、ゲームのレベルが切り替わる合間やタスクが完了した直後など、アプリの実行の流れが自然に一時停止するタイミングで表示される必要があります。FullScreenContentListener
を使用すると、広告が全画面コンテンツを表示したタイミングを特定できますが、Show()
で返される Future も広告の表示が正常に行われたことを示すシグナルになります。
firebase::Future<void> result = interstitial_ad->Show();
おすすめの方法
- インタースティシャル広告が自分のアプリに適しているかどうかをよく見極めましょう。
- インタースティシャル広告は、自然な移行ポイント(画面の切り替わりなど)があるアプリに適しています。画像の共有やゲームレベルのクリアなど、アプリ内で特定のタスクが完了したタイミングがこうした切り替わりポイントになります。ユーザーも流れの中断を想定しているため、インタースティシャル広告を表示してもユーザー エクスペリエンスを損ないません。インタースティシャル広告をアプリワークフローのどの時点で表示するか、ユーザーがどう反応する可能性があるかを考慮しましょう。
- インタースティシャル広告を表示する際には必ずアクションを一時停止してください。
- インタースティシャル広告には、テキスト、イメージ、動画などのさまざまな種類があります。アプリがインタースティシャル広告を表示する際に、広告がそのリソースを活用できるように、一部のリソースの使用を一時停止することも重要です。たとえばインタースティシャル広告を呼び出して表示する際は、アプリの音声出力を一時停止します。インストールした
FullScreenContentListener
のOnAdDismissedFullScreenContent
メソッドで音声の再生を再開できます。このメソッドは、ユーザーが広告に対する操作を完了すると呼び出されます。また、広告を表示する間、負荷の高い計算タスク(ゲームループなど)を一時的に停止することを検討してください。これにより、グラフィックが遅い、または動画が途切れる、または動画が途切れるなどの問題を回避できます。 - 十分な読み込み時間を確保しましょう。
- インタースティシャル広告を適切なタイミングで表示することも重要ですが、読み込みの待ち時間が発生しないよう注意することも重要です。表示する前に広告を読み込むようにすると、インタースティシャル広告をアプリの読み込み画面に表示できるようになります。
- 過度に広告を表示しないよう注意しましょう。
- インタースティシャル広告の表示頻度を増やすことで収益の向上が見込める一方、ユーザー エクスペリエンスが損なわれ、クリック率の低下につながります。ユーザーがアプリを楽しめなくなるほど頻繁に広告を表示しないでください。
- インタースティシャル広告を表示するために、読み込み完了表示の未来形を使用しないでください。
- これは、ユーザー エクスペリエンスの低下につながる可能性があります。代わりに、表示が必要になる前に広告をプリロードします。
参考情報
GitHub の例
- GitHub でサンプルのクイックスタート アプリのソースコードを表示します。
チュートリアル動画シリーズ「Mobile Ads Garage」
成功事例
次のステップ
- ご自身のインタースティシャル広告ユニットをお持ちでない場合は、AdMob 管理画面で作成します。
- 詳しくは、広告のターゲット設定とインタースティシャル広告に関するガイドラインをご覧ください。