横幅广告

横幅广告会占据应用布局中的一处位置,要么是设备屏幕的顶部,要么是底部。用户与应用互动时,这类广告会停留在屏幕上,并且可在一段时间后自动刷新。如果您刚开始接触移动广告,建议从横幅广告着手。案例

前提条件

务必用测试广告进行测试

在构建和测试应用时,请确保使用的是测试广告,而不是实际投放的广告。否则,可能会导致您的账号被中止。

对于横幅广告,加载测试广告最简便的方法就是使用我们的专用测试广告单元 ID,该 ID 因设备平台而异:

  • Android:ca-app-pub-3940256099942544/6300978111
  • iOS:ca-app-pub-3940256099942544/2934735716

这些广告单元 ID 已经过专门配置,可确保每个请求返回的都是测试广告。您可以在自己应用的编码、测试和调试过程中随意使用这些测试广告单元 ID。只需确保您会在发布应用前用自己的广告单元 ID 替换该测试广告单元 ID 即可。

如需详细了解移动广告 SDK 的测试广告如何运作,请参阅测试广告

实现

配置 AdView

横幅广告在 AdView 对象中展示,因此植入横幅广告的第一步是创建并放置 AdView

  1. 将以下头文件添加到应用的 C++ 代码中:

     #include "firebase/gma/ad_view.h"
    
  2. 声明并实例化一个 AdView 对象:

      firebase::gma::AdView* ad_view;
      ad_view = new firebase::gma::AdView();
    
  3. 创建一个 AdSize,并使用 AdParent 父视图初始化广告视图。父视图是指向 Android Activity 的 JNI jobject 引用,或指向已投射为 AdParent 类型的 iOS UIView 的指针:

     // my_ad_parent is a jobject reference
     // to an Android Activity or a pointer to an iOS UIView.
     firebase::gma::AdParent ad_parent = static_cast(my_ad_parent);
     firebase::Future result =
       ad_view->Initialize(ad_parent, kBannerAdUnit, firebase::gma::AdSize::kBanner);
    
  4. 除了将 Future 保留为变量之外,您还可以通过对 AdView 对象调用 InitializeLastResult() 来定期检查初始化操作的状态。这可能有助于跟踪全局游戏循环中的初始化过程。

      // Monitor the status of the future in your game loop:
      firebase::Future<void> result = ad_view->InitializeLastResult();
      if (result.status() == firebase::kFutureStatusComplete) {
        // Initialization completed.
        if(future.error() == firebase::gma::kAdErrorCodeNone) {
          // Initialization successful.
        } else {
          // An error has occurred.
        }
      } else {
        // Initialization on-going.
      }
    
  5. 如需详细了解如何使用 firebase::Future,请参阅使用 Future 来监控方法调用的完成状态

设置广告的位置

AdView 初始化后,您可以随时设置其位置:

firebase::Future<void> result = ad_view->SetPosition(firebase::gma::AdView::kPositionTop);

加载广告

初始化 AdView 后,您就可以加载广告了:

firebase::gma::AdRequest ad_request;
firebase::Future<firebase::gma::AdResult> load_ad_result = ad_view->LoadAd(my_ad_request);

AdRequest 对象代表单个广告请求,并包含定位等信息的属性。

展示广告

最后,通过调用 Show() 在界面上显示广告。在广告初始化后,可以随时调用此方法:

firebase::Future<void> result = ad_view->Show();

广告事件

Google 移动广告 C++ SDK 提供了一个 AdListener 类,您可以继承这个类并将其传递给 AdView::SetListener(),以便在广告视图的状态发生更改时能收到通知。

扩展 AdListener 中的方法是可选的,因此您只需实现所需的方法即可。下面是继承了所有 AdListener 方法类的一个类的示例实现代码:

class ExampleAdListener
    : public firebase::gma::AdListener {
 public:
  ExampleAdListener() {}
  void OnAdClicked() override {
    // This method is invoked when the user clicks the ad.
  }

  void OnAdClosed() override {
   // This method is invoked when the user closes the ad.
  }

  void OnAdImpression() override {
    // This method is invoked when an impression is recorded for an ad.
  }

  void OnAdOpened() override {
    // This method is invoked when an ad opens an overlay that covers the screen.
  }
};

ExampleAdListener* ad_listener = new ExampleAdListener();
ad_view->SetAdListener(ad_listener);

下表列出了标准的横幅广告尺寸。

尺寸(宽 x 高,以点为单位) 说明 可用性 firebase::gma::AdSize 常量
320x50 横幅 手机和平板电脑 kBanner
320x100 大型横幅广告 手机和平板电脑 kLargeBanner
300x250 IAB 中矩形 手机和平板电脑 kMediumRectangle
468x60 IAB 全尺寸横幅广告 平板电脑 kFullBanner
728x90 IAB 页首横幅广告 平板电脑 kLeaderboard
提供的宽度 x 自适应高度 自适应横幅广告 手机和平板电脑 不适用

自定义广告尺寸

如需指定自定义横幅广告尺寸,请使用带有宽度和高度参数的 firebase::gma::AdSize 构造函数设置所需的尺寸,如下所示:

firebase::gma::AdSize ad_size(/*width=*/320, /*height=*/50);

其他资源

GitHub 中的示例

成功案例