横幅广告会占据应用布局中的一处位置,要么是设备屏幕的顶部,要么是底部。用户与应用互动时,这类广告会停留在屏幕上,并且可在一段时间后自动刷新。
本指南将帮助您开始使用锚定自适应横幅广告。 锚定型自适应横幅广告会使用您指定的广告宽度,针对每部设备优化广告尺寸。
锚定自适应横幅广告是固定宽高比广告,而不是固定尺寸广告。宽高比与 320x50 类似。指定可用的完整宽度后,Google 移动广告 SDK 会返回具有最佳高度的广告。广告的最佳高度在不同的广告请求中保持不变,并且在广告刷新时,广告周围的内容会保持原位。
务必用测试广告进行测试
在构建和测试应用时,请确保使用的是测试广告,而不是实际投放的广告。否则,可能会导致您的账号被中止。
对于横幅广告,加载测试广告最简便的方法就是使用我们的专用测试广告单元 ID:
Android
ca-app-pub-3940256099942544/9214589741
iOS
ca-app-pub-3940256099942544/2435281174
这些测试广告单元 ID 已经过专门配置,可确保每个请求返回的都是测试广告。您可以在自己应用的编码、测试和调试过程中随意使用这些测试广告单元 ID。只是一定要在发布应用前用您自己的广告单元 ID 替换这些测试广告单元 ID。
获取广告尺寸
如需请求尺寸正确的横幅广告,请按以下步骤操作:
使用
MediaQuery.of(context)
获取设备屏幕的宽度(以密度无关像素 [dp] 为单位)。如果您不想使用全屏宽度,可以自行设置宽度。使用
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();
}
横幅广告事件
通过使用 BannerAdListener
,您可以监听各种广告生命周期事件,例如广告何时加载。以下示例实现了每个方法,并将消息记录到控制台:
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 会遵循您在 AdMob 界面中指定的任何刷新频率。如果您尚未启用刷新,请发出新的请求。如需详细了解广告单元刷新(例如设置刷新频率),请参阅为横幅广告使用自动刷新功能。
展示横幅广告
如需以 widget 形式展示 BannerAd
,您必须在调用 load()
之后实例化含有受支持广告的 AdWidget
。您可以在调用 load()
之前创建 widget,但必须先调用 load()
,然后才能将该 widget 添加到 widget 树中。
AdWidget
继承自 Flutter 的 Widget 类,可以像其他任何 widget 一样使用。在 iOS 中,请确保将该 widget 放置在具有指定宽度和高度的 widget 中。否则,您的广告可能不会展示。BannerAd
可以放置在尺寸与该广告匹配的容器中:
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 树中移除后调用,或在 BannerAdListener.onAdFailedToLoad()
回调中调用。
大功告成!您的应用现在就可以展示横幅广告了。
Android 9 及更低版本中的滚动限制
我们注意到,如果滚动视图中展示内嵌横幅广告,那么运行 Android 9 或更低版本的部分旧设备或性能较差的设备可能会出现性能欠佳的情况。我们建议仅在 Android 10 或更高版本上使用这些类型的横幅。固定位置横幅广告(例如锚定横幅广告)不受影响,可在所有 Android API 级别上以最佳效果使用。
GitHub 上的完整示例
如需查看本页中介绍的横幅广告集成功能的完整示例,请参阅 banner_example。
了解其他横幅广告类型
熟悉本部分中为 Flutter 应用定义的其他类型的横幅。
内嵌自适应横幅广告
内嵌自适应横幅广告的高度可变,与锚定自适应横幅广告相比,是一种更大、更高的横幅广告。对于在可滚动内容中放置横幅广告的应用,建议使用内嵌自适应横幅广告,而不是锚定自适应横幅广告。如需了解详情,请参阅内嵌自适应横幅广告。
折叠式横幅广告
折叠式横幅广告是一种横幅广告,最初会以较大的叠加层形式展示,并提供一个可将广告收起为较小尺寸的按钮。您可以考虑使用此横幅来进一步优化效果。如需了解详情,请参阅可折叠的横幅广告。