横幅

请选择平台: Android iOS Unity Flutter

横幅广告会占据应用版式中的一处位置,要么是设备屏幕的顶部,要么是底部。用户与应用互动时,这类广告会停留在界面中,并且可在一段时间后自动刷新。

本指南旨在帮助您上手使用锚定自适应横幅广告。锚定自适应横幅广告会按照您指定的广告宽度,针对每种设备优化广告尺寸。

锚定自适应横幅广告是固定宽高比的广告,而不是固定尺寸的广告。其宽高比大致为 320x50。当您指定可用的全宽后,Google 移动广告 SDK 会返回一个高度最适合该宽度的广告。广告的最适合高度在不同的广告请求中保持恒定;当广告刷新时,广告周围的内容会留在原处。

务必用测试广告进行测试

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

对于横幅广告,加载测试广告最简便的方法就是使用我们的专用测试广告单元 ID:

/21775744923/example/adaptive-banner

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

获取广告尺寸

如需请求符合广告尺寸要求的横幅广告,请按以下步骤操作:

  1. 使用 MediaQuery.of(context) 获取设备屏幕的宽度(以密度无关像素 [dp] 为单位)。如果您不想使用全屏宽度,可以自行设置宽度。

  2. AdSize 使用适当的静态方法即可获取 AdSize 对象。例如,使用 AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(int width) 可获取当前屏幕方向下的广告尺寸。

// Get an AnchoredAdaptiveBannerAdSize before loading the ad.
final size = await AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(
  MediaQuery.sizeOf(context).width.truncate(),
);

加载广告

以下示例会加载一个横幅广告:

void _loadAd() async {
  // Get an AnchoredAdaptiveBannerAdSize before loading the ad.
  final size = await AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(
    MediaQuery.sizeOf(context).width.truncate(),
  );

  if (size == null) {
    // Unable to get width of anchored banner.
    return;
  }

  BannerAd(
    adUnitId: _adUnitId,
    request: const AdRequest(),
    size: size,
    listener: BannerAdListener(
      onAdLoaded: (ad) {
        // Called when an ad is successfully received.
        debugPrint("Ad was loaded.");
        setState(() {
          _bannerAd = ad as BannerAd;
        });
      },
      onAdFailedToLoad: (ad, err) {
        // Called when an ad request failed.
        debugPrint("Ad failed to load with error: $err");
        ad.dispose();
      },
    ),
  ).load();
}

通过使用 AdManagerBannerAdListener,您可以监听各种广告生命周期事件,例如广告何时加载。下例实现了每个方法,并在控制台中记录了一条消息:

onAdOpened: (Ad ad) {
  // Called when an ad opens an overlay that covers the screen.
  debugPrint("Ad was opened.");
},
onAdClosed: (Ad ad) {
  // Called when an ad removes an overlay that covers the screen.
  debugPrint("Ad was closed.");
},
onAdImpression: (Ad ad) {
  // Called when an impression occurs on the ad.
  debugPrint("Ad recorded an impression.");
},
onAdClicked: (Ad ad) {
  // Called when an a click event occurs on the ad.
  debugPrint("Ad was clicked.");
},
onAdWillDismissScreen: (Ad ad) {
  // iOS only. Called before dismissing a full screen view.
  debugPrint("Ad will be dismissed.");
},

刷新广告

如果您已将广告单元配置为定期刷新,则在广告加载失败时无需请求加载其他广告。Google 移动广告 SDK 会遵从您在 Ad Manager 界面中指定的任何刷新频率。如果您尚未启用刷新,请发出新的请求。如需详细了解广告单元刷新(例如如何设置刷新频率),请参阅移动应用内广告的刷新频率

展示横幅广告

如需以 widget 形式展示 AdManagerBannerAd,您在调用 load() 之后,必须实例化含有受支持广告的 AdWidget。您可以在调用 load() 之前创建 widget,但必须先调用 load(),然后才能将 widget 添加到 widget 树中。

AdWidget 继承自 Flutter 的 widget 类,可以像任何其他 widget 一样使用。在 iOS 中,请确保将该微件放置在具有指定宽度和高度的微件中。否则,您的广告可能不会展示。AdManagerBannerAd 可以放置在尺寸与广告匹配的容器中:

if (_bannerAd != null)
  Align(
    alignment: Alignment.bottomCenter,
    child: SafeArea(
      child: SizedBox(
        width: _bannerAd!.size.width.toDouble(),
        height: _bannerAd!.size.height.toDouble(),
        child: AdWidget(ad: _bannerAd!),
      ),
    ),
  ),

如果不再需要访问广告,必须对其进行处置。关于何时调用 dispose(),最佳做法是在将 AdWidget 从 widget 树中移除后调用,或在 AdManagerBannerAdListener.onAdFailedToLoad() 回调中调用。

大功告成!您的应用现在就可以展示横幅广告了。

Android 9 及更低版本中的滚动限制

我们注意到,对于运行 Android 9 或更低版本的部分旧设备或性能较低的设备,在滚动视图中展示内嵌横幅广告时,可能会出现效果欠佳的情况。因此,我们建议仅在 Android 10 或更高版本上使用这些类型的横幅广告。固定位置的横幅广告(如锚定横幅广告)不会受到影响,并且可在所有 Android API 级别上使用,同时实现理想的效果。

了解其他类型的横幅广告

熟悉本部分中为 Flutter 应用定义的其他类型的横幅广告。

内嵌自适应横幅广告

内嵌自适应横幅广告的高度可变,与锚定自适应横幅广告相比,其尺寸更大、高度更高。对于在可滚动内容中放置横幅广告的应用,建议使用内嵌自适应横幅广告,而不是锚定自适应横幅广告。如需了解详情,请参阅内嵌自适应横幅广告

折叠式横幅广告

折叠式横幅广告最初会显示为尺寸较大的重叠式广告,并提供一个可将广告折叠为较小尺寸的按钮。您可以考虑使用这种横幅广告来进一步提升效果。如需了解详情,请参阅折叠式横幅广告