Catch up on highlights from Firebase at Google I/O 2023. Learn more

在您的 C++ 項目中開始使用 AdMob

本快速入門指南適用於想要使用 AdMob 通過 Firebase 構建的應用獲利的發布商和開發者。如果您不打算在應用中包含 Firebase,請訪問獨立的 AdMob 指南

如果您還沒有了解過同時使用 AdMob、Firebase 和 Google Analytics(分析)的所有優勢,請了解一下。

如果這是您第一次閱讀本指南,我們建議您下載並使用Google 移動廣告 C++ SDK 測試應用程序進行操作。

在你開始之前

  • 如果您還沒有 Firebase 項目和 Firebase 應用,請按照 Firebase 入門指南操作:將 Firebase 添加到您的 C++ 項目

  • 確保您的 Firebase 項目中啟用了 Google Analytics:

    • 如果您要創建新的 Firebase 項目,請在項目創建工作流程期間啟用 Google Analytics。

    • 如果您的現有 Firebase 項目未啟用 Google Analytics(分析),您可以從 >項目設置集成選項卡中啟用 Google Analytics。

第 1 步:在 AdMob 帳戶中設置您的應用

  1. 將應用的每個平台變體註冊為 AdMob 應用。

    1. 登錄註冊AdMob 帳戶。

    2. 使用 AdMob 註冊應用程序的每個平台變體。此步驟將創建一個帶有唯一AdMob 應用 ID 的AdMob 應用,您將在本指南的後面部分用到該 ID。

    系統會要求您將移動廣告 SDK 添加到您的應用中。在本指南的後面部分中查找有關此任務的詳細說明。

  2. 將您的每個 AdMob 應用鏈接到相應的 Firebase 應用。

    此步驟是可選的,但強烈建議這樣做。詳細了解啟用用戶指標並將 AdMob 應用關聯到 Firebase 的好處

    對於每個平台變體,請在 AdMob 帳戶的應用信息中心中完成以下兩個步驟:

    1. 啟用用戶指標以允許 AdMob 處理並顯示您 AdMob 帳戶中的精選分析數據。這也是將 AdMob 應用鏈接到 Firebase 所必需的設置。

    2. 將您的 AdMob 應用鏈接到現有 Firebase 項目和相應的 Firebase 應用。

      確保您輸入的包名稱 (Android) 或捆綁包 ID (iOS) 與您為 Firebase 應用輸入的包名稱相同。在 >項目設置您的應用卡中查找 Firebase 應用的軟件包名稱或捆綁包 ID。

第 2 步:將您的 AdMob 應用 ID 添加到您的應用中

安卓

通過添加<meta-data>標記,將您的AdMob 應用 ID添加到應用的AndroidManifest.xml文件中,如下所示。

<manifest>
    <application>
        <!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 -->
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ADMOB_APP_ID"/>
    </application>
</manifest>

iOS系統

在應用的Info.plist文件中,添加GADApplicationIdentifier鍵,其字符串值為您的AdMob 應用 ID

您可以通過編程方式進行此更改:

<!-- Sample AdMob App ID: ca-app-pub-3940256099942544~1458002511 -->
<key>GADApplicationIdentifier</key>
<string>ADMOB_APP_ID</string>

或者,在屬性列表編輯器中編輯它:

屬性列表編輯器

第 3 步:添加 Google 移動廣告 SDK

由於 Google 移動廣告 C++ SDK 駐留在firebase::gma命名空間中,因此請下載Firebase C++ SDK ,然後將其解壓縮到您選擇的目錄。

Firebase C++ SDK 不特定於平台,但它確實需要特定於平台的庫配置。

安卓

  1. 在項目的gradle.properties文件中,指定解壓後的 SDK 的位置:

    systemProp.firebase_cpp_sdk.dir=FULL/PATH/TO/SDK
  2. 在項目的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"
  3. 在您的模塊(應用級)Gradle 文件(通常為app/build.gradle )中,添加以下內容,其中包括 Google 移動廣告 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
    }
  4. 在項目的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}")
  5. 同步您的應用程序以確保所有依賴項都具有必要的版本。

你都準備好了!您的 C++ 應用已配置為使用 Google 移動廣告 C++ SDK。

iOS系統

本部分中的步驟是如何將 Google 移動廣告 C++ SDK 添加到您的 iOS 項目的示例。

  1. 通過運行以下命令獲取 CocoaPods 版本 1 或更高版本:

    sudo gem install cocoapods --pre
  2. 從解壓的 SDK 添加 Google 移動廣告窗格。

    1. 如果您還沒有 Podfile,請創建一個:

      cd YOUR_APP_DIRECTORY
      pod init
    2. 在您的 Podfile 中,添加 Google 移動廣告 C++ SDK 的 Pod:

      pod 'Google-Mobile-Ads-SDK'
    3. 安裝 pod,然後在 Xcode 中打開.xcworkspace文件。

      pod install
      open YOUR_APP.xcworkspace
    4. 將以下框架從 Firebase C++ SDK 添加到項目中:

      • xcframeworks/firebase.xcframework
      • xcframeworks/firebase_gma.xcframework

你都準備好了!您的 C++ 應用已配置為使用 Google 移動廣告 C++ SDK。

第 4 步:初始化 Google 移動廣告 SDK

在加載廣告之前,請通過調用firebase::gma::Initialize()初始化移動廣告 SDK。

此調用返回一個firebase::Future ,一旦初始化完成(或 30 秒超時後),該調用就會完成。僅調用此方法一次,並且盡可能早,最好是在應用程序啟動時調用。

以下是如何調用Initialize()的示例:

安卓

// 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 。然後,您的應用程序可以輪詢Futurestatus()以確定初始化何時完成。完成後,您的應用程序可以調用result()來獲取生成的AdapterInitializationStatus

返回Future的方法有一個相應的“最後結果”方法,應用程序可以使用該方法來檢索給定操作的最新Future 。例如, firebase::gma::Initialize()有一個名為firebase::gma::InitializeLastResult()的相應方法,它返回一個Future ,您的應用程序可以使用它來檢查上次調用firebase::gma::Initialize()

如果Future的狀態為 Complete 並且其錯誤代碼為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.
  }
}

第 5 步:選擇要在您的應用中實施的廣告格式

AdMob 提供多種不同的廣告格式,因此您可以選擇最適合應用用戶體驗的格式。點擊廣告格式的按鈕即可查看 AdMob 文檔中的詳細實施說明。

顯示在設備屏幕頂部或底部的矩形廣告

當用戶與應用程序交互時,橫幅廣告會保留在屏幕上,並且可以在一段時間後自動刷新。如果您是移動廣告新手,那麼它們是一個很好的起點。

實施橫幅廣告

插頁式

全屏廣告覆蓋應用程序界面,直至用戶關閉

插頁式廣告最適合在應用程序執行流程的自然暫停時使用,例如游戲關卡之間或任務剛完成後。

實施插頁式廣告

獎勵

獎勵用戶觀看短視頻以及與可玩廣告和調查互動的廣告

獎勵(或“基於獎勵”)廣告可以幫助免費遊戲用戶獲利。

實施激勵廣告

其他感興趣的話題

查看用戶指標和分析數據

初始化後,移動廣告 SDK 會自動開始記錄應用程序中的分析事件用戶屬性。您無需向應用添加任何額外代碼或實施任何廣告即可查看此數據。您可以在此處查看此分析數據:

請注意,為了更好地表示ARPUARPPU指標,您可能希望在這些指標的收入計算中包含來自名為ecommerce_purchase的分析自定義事件的數據(了解操作方法)。

(可選)使用 Google Analytics 和 Firebase 的更多功能

利用更多機會和功能來提高應用貨幣化和用戶參與度:

  • 添加並使用適用於 Google Analytics 的 Firebase SDK

    要了解更多信息,請訪問將Google Analytics 和 Firebase 與 AdMob 應用結合使用的指南 。

  • 在您的應用中使用其他 Firebase 產品

    添加適用於 Google Analytics 的 Firebase SDK 後,可以使用其他 Firebase 產品來優化應用中的廣告。

    • 遠程配置使您能夠更改應用程序的行為和外觀,而無需為無限的每日活躍用戶免費發布應用程序更新。

    • A/B 測試使您能夠測試應用程序 UI、功能或參與活動的更改,以了解它們是否對您的關鍵指標(例如收入和保留率)產生影響,然後再廣泛推廣更改。