このガイドは、Firebase を使用せずに AdMob で C++ アプリを収益化したいパブリッシャー様を対象としています。Firebase をアプリに組み込む予定がある場合、または Firebase の使用を検討している場合は、このガイドの Firebase と AdMob の使用をご覧ください。
Google Mobile Ads C++ SDK のアプリへの統合は、広告を表示して収益を得るための第一歩です。SDK を統合すると、インタースティシャルやリワードなどの広告フォーマットを選択し、手順に沿って実装できます。
Google Mobile Ads C++ SDK は Google Mobile Ads iOS および 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 の使用をおすすめしますが、ndk-build の手順は、一般的な Firebase C++ SDK スタートガイドで libfirebase_app.a
と libfirebase_gma.a
をアプリにリンクしています。
プロジェクトの
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 を初期化します。初期化が完了すると(または 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
を返すメソッドには、対応する「前回の結果」メソッドがあります。アプリは、これを使用して特定のアクションの最新の 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 にはさまざまな広告フォーマットが用意されており、アプリのユーザー エクスペリエンスに最適なものを選択できます。
バナー
デバイス画面の上部か下部に表示される長方形の広告です。アプリの操作中は画面に表示され続けますが、一定時間が経過すると自動的に更新されるよう設定できます。モバイル広告を初めてお使いの場合は、この広告から始めることをおすすめします。
インタースティシャル
ユーザーが閉じるまでアプリのインターフェース上に全画面表示される広告です。ゲームのレベルが切り替わる合間やタスクが完了した直後など、アプリの実行の流れが自然に一時停止するタイミングでの使用に適しています。
特典
短い動画を視聴したり体験プレイ広告やアンケートを操作したユーザーに特典を提供する広告。無料アプリの収益化に使用されます。