获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

在您的 C++ 项目中开始使用 AdMob

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

本快速入门指南适用于希望使用 AdMob 通过使用 Firebase 构建的应用获利的发布商和开发人员。

如果您还没有,请了解结合使用 AdMob、Firebase 和 Google Analytics 的所有好处

如果这是您第一次阅读本指南,我们建议您下载并使用Google 移动广告 C++ SDK 测试应用进行操作。

在你开始之前

  • 如果您还没有 Firebase 项目和 Firebase 应用程序,请遵循 Firebase 入门指南:将 Firebase 添加到您的 C++ 项目

  • 确保在您的 Firebase 项目中启用了 Google Analytics:

    • 如果您要创建新的 Firebase 项目,请在项目创建工作流程中启用 Google Analytics。

    • 如果您有一个未启用 Google Analytics 的现有 Firebase 项目,您可以从您的 >项目设置Integrations选项卡中启用 Google Analytics。

第 1 步:在您的 AdMob 帐户中设置您的应用

  1. 将您应用的每个平台变体注册为 AdMob 应用。

    1. 登录注册AdMob 帐户。

    2. 向 AdMob 注册您应用程序的每个平台变体。此步骤会创建一个具有唯一AdMob 应用程序 ID的 AdMob 应用程序,您将在本指南的后面部分用到它。

    系统会要求您将移动广告 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 App 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 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 移动广告 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的状态为完成且其错误代码为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 的更多功能

利用更多机会和功能来提高应用程序的货币化和用户参与度: