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

建議使用 AdMob 的 iOS 和 Android SDK。


本快速入門指南適用於想透過 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,可以前往 >「Project settings」(專案設定) 的「Integrations」(整合) 分頁啟用 Google Analytics。

步驟 1:在 AdMob 帳戶中設定應用程式

  1. 將應用程式的每個平台版本註冊為 AdMob 應用程式。

    1. 登入或註冊 AdMob 帳戶。

    2. 在 AdMob 註冊應用程式的各個平台版本。這個步驟會建立 AdMob 應用程式,並產生專屬的 AdMob 應用程式 ID (本指南後續步驟會用到)。

    系統會要求您將 Mobile Ads SDK 新增至應用程式。本指南稍後會提供這項工作的詳細操作說明。

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

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

    針對每個平台變化版本,請在 AdMob 帳戶的「Apps」資訊主頁中完成下列兩個步驟:

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

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

      請務必輸入與 Firebase 應用程式相同的套件名稱 (Android) 或軟體包 ID (iOS)。如要查看 Firebase 應用程式的套件名稱或軟體包 ID,請前往 >「Project settings」(專案設定),然後查看「Your apps」(您的應用程式) 資訊卡。

步驟 2:在應用程式中加入 AdMob 應用程式 ID

Android

請在應用程式的 AndroidManifest.xml 檔案中加入 <meta-data> 標記,如下所示,以新增 AdMob 應用程式 ID。

<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,請建立一個:

      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。接著,應用程式可以輪詢 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.
  }
}

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

AdMob 提供多種廣告格式,您可以根據應用程式的使用者體驗,選擇最適合的格式。點選廣告格式按鈕,即可查看 AdMob 說明文件中的詳細導入操作說明。

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

使用者操作應用程式時,橫幅廣告會持續停留在畫面上,並能定時自動更新內容。對剛接觸行動廣告的新手來說,這是很好的入門選擇。

導入橫幅廣告

插頁式

完全覆蓋應用程式介面的全螢幕廣告,使用者需自行關閉

插頁式廣告最適合出現在應用程式執行流程中的自然停頓點,例如遊戲關卡之間或完成任務後。

導入插頁式廣告

獎勵廣告

這類廣告會在使用者看完短片、與可試玩廣告互動,或完成問卷調查後提供獎勵

獎勵廣告 (或「獎勵制」廣告) 可協助您透過免付費玩遊戲的使用者營利。

導入獎勵廣告

其他感興趣的主題

探索其他評估指標的方法,並將 Firebase 功能與 AdMob 整合。

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

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

請注意,為了更準確地呈現 ARPU 和 ARPPU 指標,您可能需要在這些指標的收益計算中,納入名為 ecommerce_purchase 的 Analytics 自訂事件資料 (瞭解做法)。

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

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