在 C++ 專案中開始使用 AdMob


本快速入門指南適用於想使用 AdMob,透過以 Firebase 建構的應用程式營利的發布商和開發人員。如果您不打算在應用程式中加入 Firebase,請改為參閱獨立AdMob指南

如果您尚未瞭解,請參閱這篇文章,瞭解如何搭配使用 AdMob、Firebase 和 Google Analytics

如果您是第一次閱讀本指南,建議您下載 Google Mobile Ads 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 應用程式,並提供專屬的 AdMob「應用程式 ID」,您會在稍後的指南中用到。

    系統會要求您將 Mobile Ads SDK 新增至應用程式。如需這項工作的詳細操作說明,請參閱本指南後續內容。

  2. 將每個 AdMob 應用程式連結至對應的 Firebase 應用程式。

    這是選用步驟,但強烈建議執行。進一步瞭解啟用使用者指標並將 AdMob 應用程式連結至 Firebase 的好處

    針對每個平台變體,在 AdMob 帳戶的「應用程式」資訊主頁中完成下列兩個步驟:

    1. 啟用使用者指標AdMob 即可處理並在您的 AdMob 帳戶中顯示精選的數據分析資料。此外,您也必須進行這項設定,才能將 AdMob 應用程式連結至 Firebase。

    2. 將應用程式連結至現有的 Firebase 專案和對應的 Firebase 應用程式。AdMob

      請務必輸入與 Firebase 應用程式相同的套件名稱 (Android) 或套件 ID (iOS)。如要找出 Firebase 應用程式的套件名稱或套件 ID,請依序點選 >「專案設定」,然後在「您的應用程式」資訊卡中查看。

步驟 2:AdMob 應用程式 ID 新增至應用程式

Android

AdMob應用程式 ID新增至應用程式的 AndroidManifest.xml 檔案,方法是加入 <meta-data> 標記,如下所示。

<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 Mobile Ads SDK

由於 Google Mobile Ads C++ SDK 位於 firebase::gma 命名空間中,請下載 Firebase C++ SDK,然後解壓縮至您選擇的目錄。

Firebase C++ SDK 並非平台專屬,但需要平台專屬的程式庫設定。

Android

  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 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
    }
  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 Mobile Ads C++ SDK。

iOS

本節的步驟說明如何將 Google Mobile Ads C++ SDK 新增至 iOS 專案。

  1. 執行下列指令,取得 CocoaPods 1 以上版本:

    sudo gem install cocoapods --pre
  2. 從解壓縮的 SDK 新增 Google Mobile Ads Pod。

    1. 如果沒有 Podfile,請先建立 Podfile:

      cd YOUR_APP_DIRECTORY
      pod init
    2. 在 Podfile 中,加入 Google Mobile Ads 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 Mobile Ads C++ SDK。

步驟 4:初始化 Google Mobile Ads SDK

載入廣告前,請呼叫 firebase::gma::Initialize() 初始化 Mobile Ads SDK。

這個呼叫會傳回 firebase::Future,並在初始化完成後 (或 30 秒逾時後) 完成。請盡早呼叫這個方法一次,最好是在應用程式啟動時呼叫。

以下範例說明如何呼叫 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。然後,應用程式可以輪詢 Futurestatus(),判斷初始化作業何時完成。 完成後,應用程式即可叫用 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.
  }
}

步驟 5:選擇要在應用程式中導入的廣告格式

AdMob 提供多種廣告格式,您可以選擇最符合應用程式使用者體驗的格式。按一下廣告格式的按鈕,即可在 AdMob 文件中查看詳細的實作說明。

顯示在裝置畫面頂端或底部的矩形廣告

使用者與應用程式互動時,橫幅廣告會停留在螢幕上,且經過一段時間後會自動重新整理。如果您剛開始接觸行動廣告,建議先從這些廣告活動類型著手。

導入橫幅廣告

插頁式

全螢幕廣告,會覆蓋整個應用程式介面,直到使用者關閉為止

插頁式廣告最適合在應用程式執行流程中的自然暫停點放送,例如遊戲關卡之間或完成工作後。

導入插頁式廣告

獎勵廣告

在使用者看完短片、與可試玩廣告及問卷調查互動後提供獎勵的廣告

獎勵廣告 (或「以獎勵為基礎」的廣告) 有助於透過免費遊戲使用者營利。

導入獎勵廣告

其他感興趣的主題

查看使用者指標和數據分析資料

初始化後,Mobile Ads SDK 會自動開始記錄應用程式的 Analytics事件使用者屬性。您不必在應用程式中新增任何程式碼或導入任何廣告,就能查看這項資料。您可以在下列位置查看這項數據分析資料:

請注意,如要更準確地呈現每位使用者的平均收益 (ARPU)單一付費使用者平均收益 (ARPPU) 指標,您可能需要在這些指標的收益計算中納入名為 ecommerce_purchase 的 Analytics 自訂事件資料 (瞭解如何操作)。

(選用) 使用 Google Analytics 和 Firebase 的其他功能

善用更多商機和功能,提升應用程式營利成效和使用者參與度:

  • 新增及使用適用於 Google Analytics 的 Firebase SDK

    • 在應用程式中導入自訂事件記錄

    • 自訂廣告活動標示轉換。

    • 每位使用者的平均收益 (ARPU)單一付費使用者平均收益 (ARPPU) 指標的收益計算中,納入 ecommerce_purchase 事件資料。

    詳情請參閱搭配使用 Google Analytics 和 Firebase 應用程式AdMob的指南

  • 在應用程式中使用其他 Firebase 產品

    新增 Google Analytics 專用的 Firebase SDK 後,即可使用其他 Firebase 產品,在應用程式中放送最佳化廣告。

    • Remote Config 可讓您直接變更應用程式行為和外觀 (不用發布應用程式更新),而且不收取任何費用,每日活躍使用者人數也沒有上限。

    • 透過 A/B Testing,您可以測試對應用程式 UI、功能或參與度廣告活動所做的變更,瞭解變更是否會影響重要指標 (例如收益和留存率),再廣泛推出變更。