このガイドは、Firebase を使用せずに AdMob で C++ アプリを収益化したいパブリッシャー様を対象としています。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 以上compileSdkVersion
が 28 以上
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 の連続配信広告を追加します。
Podfile がない場合は作成します。
cd APP_DIRECTORY
pod init
Podfile に、Google Mobile Ads C++ SDK、Google User Messaging Platform SDK、最小限の Firebase Core SDK(GMA C++ SDK で必要)の Pod を追加します。
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 秒のタイムアウト後に)、SDK が初期化され、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 にはさまざまな広告フォーマットが用意されており、アプリのユーザー エクスペリエンスに最適なものを選択できます。
バナー
デバイス画面の上部か下部に表示される長方形の広告です。 アプリの操作中は画面に表示され続けますが、一定時間が経過すると自動的に更新されるよう設定できます。モバイル広告を初めてお使いの場合は、この広告から始めることをおすすめします。
インタースティシャル
ユーザーが閉じるまでアプリのインターフェース上に全画面表示される広告です。ゲームのレベルが切り替わる合間やタスクが完了した直後など、アプリの実行フローが自然に一時停止するタイミングでの使用に適しています。
特典
短い動画を視聴し、体験プレイ広告やアンケートを操作したユーザーに報酬を付与する広告。無料アプリの収益化に使用されます。