广告预加载(Beta 版)

广告预加载是 Google Mobile Ads Flutter Plugin 中的一项 Google 管理的广告加载功能, 可代表您管理广告加载和缓存。广告预加载需要您更改管理广告加载的方式。如需使用广告预加载优化性能, 请停用自定义缓存并将此责任委托给 Google Mobile Ads Flutter Plugin

与手动广告加载相比,广告预加载具有以下优势:

  • 引用管理: 存储已加载的广告,因此您无需维护引用,直到准备好展示广告为止。
  • 自动重新加载: 当您从缓存中提取广告时,会自动加载新广告。
  • 托管重试: 使用指数退避算法自动重试失败的请求。
  • 到期处理: 在广告到期之前(通常为一小时后)自动刷新广告。
  • 缓存优化: 如果您使用的缓存大小大于 1,Google Mobile Ads Flutter Plugin 优化缓存顺序,以投放最佳广告。

本指南介绍了如何配置预加载广告、检查预加载广告的可用性以及展示预加载的广告。

前提条件

在继续学习本教程之前,您必须设置Google Mobile Ads Flutter Plugin

开始预加载广告

应用启动时,请调用 start 方法一次。调用 您调用 start 方法后,Google Mobile Ads Flutter Plugin 会自动 预加载广告,并重试预加载配置的失败请求。

以下示例演示了如何开始预加载广告:

InterstitialAdPreloader.start(
  preloadId: _adUnitId,
  preloadConfiguration: PreloadConfiguration(adUnitId: _adUnitId),
  callback: const PreloadCallback(),
);

_adUnitId 替换为您的广告单元 ID。

获取并展示预加载的广告

使用广告预加载时,Google Mobile Ads Flutter Plugin 会存储缓存的广告。 当您想要展示广告时,请调用 pollAd 方法。 Google Mobile Ads Flutter Plugin 会检索可用的广告,并在后台自动预加载 下一个广告。

在准备好展示广告之前,请避免调用 pollAd 方法。将广告保留在缓存中,可让 Google Mobile Ads Flutter Plugin 自动刷新 过期的广告并执行缓存优化。

以下示例演示了如何检索和展示预加载的广告:

void _pollAndShowAd() async {
  final InterstitialAd? ad = await InterstitialAdPreloader.pollAd(_adUnitId);
  if (ad != null) {
    _interstitialAd = ad;
    ad.fullScreenContentCallback = FullScreenContentCallback(
      onAdImpression: (ad) {
        // Called when an impression occurs on the ad.
        debugPrint('Ad recorded an impression.');
      },
    );
    ad.onPaidEvent = (ad, valueMicros, precision, currencyCode) {
      // Called when an ad is estimated to have earned money.
      debugPrint('Ad paid: $valueMicros $currencyCode.');
    };
    // Show the ad.
    await ad.show();
  }
}

检查预加载广告的可用性

如需检查广告的可用性,请选择以下选项之一:

获取预加载广告的可用性

以下示例演示了如何检查广告的可用性:

void _checkAdAvailability() async {
  final bool isAvailable = await InterstitialAdPreloader.isAdAvailable(
    _adUnitId,
  );
  debugPrint('Is ad available: $isAvailable');
}

监听预加载广告的可用性

注册预加载事件,以便在广告预加载成功、预加载失败或广告缓存耗尽时收到通知。

预加载事件旨在用于分析。在预加载事件回调中:

  • 请勿调用 start
  • 除非广告会立即展示,否则请避免调用 pollAd

以下示例演示了如何注册广告事件:

InterstitialAdPreloader.start(
  preloadId: _adUnitId,
  preloadConfiguration: PreloadConfiguration(adUnitId: _adUnitId),
  callback: PreloadCallback(
    onAdPreloaded: (preloadId, responseInfo) {
      debugPrint('Ad preloaded for ID: $preloadId');
    },
    onAdFailedToPreload: (preloadId, error) {
      debugPrint('Ad failed to preload for ID: $preloadId. Error: $error');
    },
    onAdsExhausted: (preloadId) {
      debugPrint('All preloaded ads exhausted for ID: $preloadId');
    },
  ),
);

停止预加载广告

如果您不需要在会话中再次展示具有预加载 ID 的广告,可以停止预加载广告。如需停止预加载具有特定预加载 ID 的广告,请使用预加载 ID 调用 destroy。如需停止预加载所有预加载器,请调用 destroyAll

void _stopPreloading() async {
  await InterstitialAdPreloader.destroy(_adUnitId);
}

设置缓冲区大小

缓冲区空间用于控制内存中存储的预加载广告数量。默认情况下,Google 会优化缓冲区大小,以平衡内存消耗和广告投放延迟时间。如果您的应用在加载下一个广告之前展示广告,您可以设置自定义缓冲区空间,以增加内存中存储的广告数量。

InterstitialAdPreloader.start(
  preloadId: _adUnitId,
  preloadConfiguration: PreloadConfiguration(
    adUnitId: _adUnitId,
    bufferSize: 3,
  ),
  callback: const PreloadCallback(),
);

预加载缓存限制

Google Mobile Ads Flutter Plugin 对所有广告单元和预加载 ID 的预加载广告总数强制执行应用级限制:

  • 默认限制:Google Mobile Ads Flutter Plugin 最多在内存中存储 6 个预加载广告。 此限制适用于所有格式和预加载 ID。
  • 我们建议为每个预加载 ID 保留大小为 2 的缓冲区空间。