このガイドは、Firebase を使用せずに AdMob で C++ アプリを収益化することをご希望のパブリッシャー様を対象としています。アプリで Firebase を使用する予定がある場合(または使用を検討している場合)は、このガイドの Firebase を使った AdMob 向けのバージョンをご覧ください。
Google Mobile Ads C++ SDK をアプリに統合することは、広告を表示して収益を得るための第一歩です。SDK を統合したら、インタースティシャル広告やリワード広告などの広告フォーマットを選択し、手順に沿って実装してください。
Google Mobile Ads C++ SDK は、Google Mobile Ads iOS SDK と Android SDK をラップしたもので、これらのプラットフォームでのみ使用できます。Google Mobile Ads C++ SDK は Firebase C++ コンストラクトを使用して非同期オペレーションをサポートしているため、firebase::gma
名前空間に存在します。
このガイドを初めてお読みになる場合は、Google Mobile Ads C++ テストアプリをダウンロードして使用しながら進めることをおすすめします。
前提条件
Android
- Android Studio 3.2 以降を使用している
- アプリのビルドファイルで次の値が使用されていることを確認します。
minSdkVersion
が 16 以上- 28 以上の
compileSdkVersion
iOS
- Xcode 13 以降を使用していること
- iOS 10.0 以降をターゲットとしていること
AdMob アカウントでアプリを設定する
次の手順に沿って、アプリを AdMob アプリとして登録します。
AdMob にアプリを登録します。この手順では、ガイドの後半で必要になる固有の AdMob アプリ ID を使用して、AdMob アプリを作成します。
Google Mobile Ads C++ SDK をインストールする
Google Mobile Ads C++ SDK は firebase::gma
名前空間内に存在しているため、Firebase C++ SDK をダウンロードしてから、任意のディレクトリに解凍します。
Firebase C++ SDK は特定のプラットフォームを必要としませんが、プラットフォーム固有のライブラリ構成が必要です。
Android
CMake の使用をおすすめしますが、一般的な Firebase C++ SDK スタートガイドに libfirebase_app.a
と libfirebase_gma.a
をアプリにリンクするための ndk-build の手順についても示しています。
プロジェクトの
gradle.properties
ファイルで、解凍した SDK の場所を指定します。systemProp.firebase_cpp_sdk.dir=FULL_PATH_TO_SDK
プロジェクトの
settings.gradle
ファイルに、以下の内容を追加します。def firebase_cpp_sdk_dir = System.getProperty('firebase_cpp_sdk.dir') gradle.ext.firebase_cpp_sdk_dir = "$firebase_cpp_sdk_dir" includeBuild "$firebase_cpp_sdk_dir"
モジュール(アプリレベル)の Gradle ファイル(通常は
app/build.gradle
)に、以下の内容を追加して、Google Mobile Ads C++ SDK のライブラリ依存関係を含めます。android.defaultConfig.externalNativeBuild.cmake { arguments "-DFIREBASE_CPP_SDK_DIR=$gradle.firebase_cpp_sdk_dir" } # Add the dependency for the Google Mobile Ads C++ SDK apply from: "$gradle.firebase_cpp_sdk_dir/Android/firebase_dependencies.gradle" firebaseCpp.dependencies { gma }
プロジェクトの
CMakeLists.txt
ファイルに、以下の内容を追加します。# Add Firebase libraries to the target using the function from the SDK. add_subdirectory(${FIREBASE_CPP_SDK_DIR} bin/ EXCLUDE_FROM_ALL) # Add the Google Mobile Ads C++ SDK. # The Firebase C++ library `firebase_app` is required, # and it must always be listed last. set(firebase_libs firebase_gma firebase_app ) target_link_libraries(${target_name} "${firebase_libs}")
アプリを同期して、すべての依存関係に必要なバージョンがあることを確認します。
iOS
このセクションの手順は、Google Mobile Ads C++ SDK を iOS プロジェクトに追加する方法の一例です。
次のコマンドを実行して、CocoaPods バージョン 1 以降を取得します。
sudo gem install cocoapods --pre
解凍した SDK から Google Mobile Ads Pod を追加します。
Podfile がない場合は作成します。
cd APP_DIRECTORY
pod init
Google Mobile Ads C++ SDK、Google User Messaging Platform SDK、最小限の Firebase Core SDK(GMA C++ SDK で必要)の Pod を Podfile に追加します。
pod 'Firebase/CoreOnly' pod 'Google-Mobile-Ads-SDK' pod 'GoogleUserMessagingPlatform'
Pod をインストールし、Xcode で
.xcworkspace
ファイルを開きます。pod install
open APP.xcworkspace
以下のフレームワークを Firebase C++ SDK からプロジェクトに追加します。
xcframeworks/firebase.xcframework
xcframeworks/firebase_gma.xcframework
方は、C++ アプリは、他の Firebase サービスなしで Google Mobile Ads C++ SDK を使用するように構成されています。
アプリの AdMob アプリ ID を設定する
Android
Mobile Ads SDK Android ガイドのアプリを構成するのステップ 3 に沿って設定してから、このページに戻ります。
iOS
Mobile Ads SDK iOS ガイドの説明に沿って Info.plist を更新する手順を行い、このページに戻ります。
Google Mobile Ads SDK を初期化する
広告を読み込む前に、firebase::gma::Initialize()
を呼び出して、アプリで Google Mobile Ads C++ SDK を初期化します。これにより、SDK が初期化され、初期化の完了後(または 30 秒のタイムアウト後)に firebase::Future
が完了します。この処理は 1 回だけ行います(アプリの起動時に行うのが理想的です)。
Initialize()
を呼び出すと、Google Mobile Ads C++ SDK またはメディエーション パートナーの SDK によって広告が事前に読み込まれる場合があります。欧州経済領域(EEA)内のユーザーから同意を得る必要がある場合は、リクエストに適したフラグ(tag_for_child_directed_treatment
や tag_for_under_age_of_consent
など)を設定するか、広告が読み込まれる前になんらかの対応策を取ってください。その後、Google Mobile Ads C++ SDK を初期化する前に firebase::gma::SetRequestConfiguration()
を呼び出して行ってください。詳しくは、ターゲティング ガイドをご覧ください。
Initialize()
を呼び出す方法の例を次に示します。
Android
// Initialize the Google Mobile Ads library
firebase::InitResult result;
Future<AdapterInitializationStatus> future =
firebase::gma::Initialize(jni_env, j_activity, &result);
if (result != kInitResultSuccess) {
// Initialization immediately failed, most likely due to a missing
// dependency. Check the device logs for more information.
return;
}
// Monitor the status of the future.
// See "Use a Future to monitor the completion status of a method call" below.
if (future.status() == firebase::kFutureStatusComplete &&
future.error() == firebase::gma::kAdErrorCodeNone) {
// Initialization completed.
} else {
// Initialization on-going, or an error has occurred.
}
iOS
// Initialize the Google Mobile Ads library.
firebase::InitResult result;
Future<AdapterInitializationStatus> future =
firebase::gma::Initialize(&result);
if (result != kInitResultSuccess) {
// Initialization immediately failed, most likely due to a missing
// dependency. Check the device logs for more information.
return;
}
// Monitor the status of the future.
// See "Use a Future to monitor the completion status of a method call" below.
if (future.status() == firebase::kFutureStatusComplete &&
future.error() == firebase::gma::kAdErrorCodeNone) {
// Initialization completed.
} else {
// Initialization on-going, or an error has occurred.
}
Future
を使用してメソッド呼び出しの完了ステータスをモニタリングする
Future
を使用すると、非同期メソッド呼び出しの完了ステータスを特定できます。
たとえば、アプリが firebase::gma::Initialize()
を呼び出すと、新しい firebase::Future
が作成されて返されます。アプリは Future
の status()
をポーリングして、初期化が完了したタイミングを特定できます。初期化が完了すると、アプリは result()
を呼び出して結果の AdapterInitializationStatus
を取得できます。
Future
を返すメソッドには、それぞれ「前回の結果(LastResult)」を取得するメソッドが用意されています。アプリは、このメソッドを使用して特定のアクションの最新の Future
を取得できます。たとえば、firebase::gma::Initialize()
には firebase::gma::InitializeLastResult()
と呼ばれる対応するメソッドがあります。アプリは、このメソッドで返される Future
を使用して、firebase::gma::Initialize()
への前回の呼び出しのステータスを確認できます。
Future
のステータスが完了で、エラーコードが firebase::gma::kAdErrorCodeNone
の場合、オペレーションは正常に完了しています。
また、Future
が完了したときに呼び出すコールバックを登録することもできます。コールバックが別のスレッドで実行される場合もあるため、コードがスレッドセーフであることを確認してください。次のコード スニペットでは、コールバックに関数ポインタを使用しています。
// Registers the OnCompletion callback. user_data is a pointer that is passed verbatim
// to the callback as a void*. This allows you to pass any custom data to the callback
// handler. In this case, the app has no data, so you must pass nullptr.
firebase::gma::InitializeLastResult().OnCompletion(OnCompletionCallback,
/*user_data=*/nullptr);
// The OnCompletion callback function.
static void OnCompletionCallback(
const firebase::Future<AdapterInitializationStatus>& future, void* user_data) {
// Called when the Future is completed for the last call to firebase::gma::Initialize().
// If the error code is firebase::gma::kAdErrorCodeNone,
// then the SDK has been successfully initialized.
if (future.error() == firebase::gma::kAdErrorCodeNone) {
// success!
} else {
// failure.
}
}
広告フォーマットを選択します
これで Google Mobile Ads C++ SDK がインポートされ、広告を実装できるようになりました。さまざまな広告フォーマットが用意されている AdMob では、アプリのユーザー エクスペリエンスに最適なものを選択できます。
バナー
デバイス画面の上部か下部に表示される長方形の広告です。アプリの操作中は画面に表示され続けますが、一定時間が経過すると自動的に更新されるよう設定できます。モバイル広告を初めてお使いの場合は、この広告から始めることをおすすめします。
インタースティシャル
ユーザーが閉じるまでアプリのインターフェース上に全画面表示される広告です。ゲームのレベルが切り替わる合間やタスクが完了した直後など、アプリの実行の流れが自然に一時停止するタイミングでの使用に適しています。
特典
ユーザーが短い動画を視聴し、体験プレイ広告やアンケートを操作した際に報酬を進呈する広告です。無料アプリの収益化に使用されます。