插屏广告

插屏广告是一种全屏广告格式,嵌入在应用内容中,在自然暂停时显示,例如在游戏关卡之间过渡或完成目标操作时。

当应用呈现插屏广告时,用户有两个选择:点击广告并前往广告商网站或关闭广告并返回应用。

插屏广告中,用户注意力会完全集中在广告上,因此展示成本较高。

本指南将向您展示如何将插屏广告集成到 Flutter 应用中。 除了代码示例和说明之外,本指南还包含特定于格式的建议和其他资源的链接。

前提条件

  1. 按照 快速入门 中的流程集成 Yandex Mobile Ads Flutter 插件。
  2. 确保您运行的是最新的 Yandex Mobile Ads Flutter 插件 版本。如果您使用聚合,请确保您运行的是最新版本的 统一构建

实施

集成插屏广告的关键步骤:

  • 创建并配置 InterstitialAdLoader 广告加载器。
  • 加载 InterstitialAd
  • 为广告回调方法注册 InterstitialAdEventListener 监听器。
  • 呈现 InterstitialAd

插屏广告集成的特点

  1. 如果您在 onAdFailedToLoad() 回调中收到错误,请不要尝试再次加载新广告。如果没有其他选项,请限制广告加载重试次数。这将有助于避免出现限制时持续出现不成功的请求和连接问题。

加载广告

要上传插屏广告,请创建并设置 InterstitialAdLoader 对象。

调用 InterstitialAdLoader.create(onAdLoaded, onAdFailedToLoad) 方法并向其传递加载器回调监听器。

您将需要来自 Partner Interface (adUnitId) 的广告单元 ID。

您可以通过 AdRequestConfiguration扩展广告请求参数集,在构造函数中传递用户兴趣、上下文应用数据、位置详细信息或其他数据。在请求中提供额外的上下文数据可以显著提高您的广告质量。

以下示例展示了如何加载插屏广告:

late final Future<InterstitialAdLoader> _adLoader;
InterstitialAd? _ad;

@override
void initState() {
  super.initState();
  MobileAds.initialize();
  _adLoader = _createInterstitialAdLoader();
  _loadInterstitialAd();
}

Future<InterstitialAdLoader> _createInterstitialAdLoader() {
  return InterstitialAdLoader.create(
    onAdLoaded: (InterstitialAd interstitialAd) {
      // 广告加载成功。现在您可以显示已加载的广告
      _ad = interstitialAd;
    },
    onAdFailedToLoad: (error) {
      // 广告加载失败,出现 AdRequestError。
      // 强烈建议不要尝试通过 onAdFailedToLoad() 方法加载新广告。
    },
  );
}

Future<void> _loadInterstitialAd() async {
  final adLoader = await _adLoader;
  await adLoader.loadAd(adRequestConfiguration: AdRequestConfiguration(adUnitId: 'R-M-XXXXXX-Y')); // 为了进行调试,您可以使用 'demo-interstitial-yandex'
}

广告呈现

插屏广告应在应用运行的自然暂停期间展示。一个不错的选择是在游戏关卡之间或转换后(例如,下载文件时)插入插屏广告。

要跟踪插屏广告生命周期,请为 InterstitialAd 对象设置 InterstitialAdEventListener 回调方法监听器。

要显示插屏广告,请使用 show() 方法。使用waitForDismiss() 方法等待观看结束。

_showAd() async {
  _ad?.setAdEventListener(
      eventListener: InterstitialAdEventListener(
    onAdShown: () {
      // 广告展示时调用。
    },
    onAdFailedToShow: (error) {
      // 当 InterstitialAd 未能显示时调用。
      // 销毁广告,这样就不会再次展示该广告。
      _ad?.destroy();
      _ad = null;

      // 现在您可以预加载下一个插屏广告。
      _loadInterstitialAd();
    },
    onAdClicked: () {
      // 记录广告点击时调用。
    },
    onAdDismissed: () {
      // 广告关闭时调用。
      // 销毁广告,这样就不会再次展示该广告。
      _ad?.destroy();
      _ad = null;

      // 现在您可以预加载下一个插屏广告。
      _loadInterstitialAd();
    },
    onAdImpression: (impressionData) {
      // 记录广告展示次数时调用。
    },
  ));
  await _ad?.show();
  await _ad?.waitForDismiss();
}

释放资源

针对之前展示的广告调用 destroy() 方法。这可以释放资源并防止内存泄漏。

不要存储先前呈现的广告的链接。

您可以使用 onAdDismissed 回调方法执行以下操作:

_ad?.setAdEventListener(
    eventListener: InterstitialAdEventListener(
        //...
        onAdDismissed: () {
          _ad?.destroy();
          _ad = null;
        },
        //...
    ));

测试插屏广告集成

使用演示广告单元进行广告测试

我们建议使用测试广告来测试您的插屏广告集成和应用本身。

为了保证为每个广告请求返回测试广告,我们创建了一个特殊的演示广告版位 ID。用它来检查您的广告集成。

演示广告单元 ID:demo-interstitial-yandex

重要

确保在将应用发布到商店之前,您已将演示广告版位 ID 替换为在 PI 中获取的真实广告版位 ID。

您可以在 用于测试的演示广告单元 版块找到可用的演示广告版位 ID 列表。

测试广告集成

您可以使用 SDK 的内置分析器检查插屏广告集成。

该工具可确保您的插屏广告正确集成,并向日志输出详细报告。 要查看报告,请在用于 Android 应用程序调试的 Logcat 工具中搜索“YandexAds”关键字。

adb logcat -v brief '*:S YandexAds'

如果集成成功,您将看到以下消息:

adb logcat -v brief '*:S YandexAds'
mobileads$ adb logcat -v brief '*:S YandexAds'
I/YandexAds(13719): [Integration] Ad type interstitital was integrated successfully

如果您在集成插屏广告时遇到问题,您将获得有关问题的详细报告以及如何解决这些问题的建议。

使用演示广告单元进行广告测试

我们建议使用测试广告来测试您的广告集成和应用本身。

为了保证为每个广告请求返回测试广告,我们创建了一个特殊的演示广告版位 ID。用它来检查您的广告集成。

演示广告单元 ID:demo-interstitial-yandex

重要

确保在将应用发布到商店之前,您已将演示广告版位 ID 替换为在 PI 中获取的真实广告版位 ID。

您可以在 用于测试的演示广告单元 部分找到可用的演示广告版位 ID 列表。

测试广告集成

您可以使用本机控制台工具测试广告集成。

要查看详细日志,请调用 YMAMobileAds 类的 enableLogging 方法。

YMAMobileAds.enableLogging()

要查看 SDK 日志,请前往控制台工具并设置 sybsystem = com.yandex.mobile.ads.sdk。您还可以按类别和错误级别过滤日志。

如果您在集成广告时遇到问题,您将获得有关问题的详细报告以及如何解决这些问题的建议。

提示

广告预加载

加载广告可能需要几秒钟的时间,具体取决于移动聚合中对接的广告网络数量和用户的互联网速度。我们建议在展示广告之前预加载广告。

提前调用 load 以在适当的时刻显示加载的广告。

要在投放当前广告后立即开始加载下一个广告,请将此进程绑定到 onAdDismissed() 事件。

如果您在太多不太可能显示的屏幕上缓存广告,您的广告效果可能会下降。例如,如果用户每次会话完成 2-3 个游戏关卡,则您不应缓存 6-7 个屏幕的广告。否则,您的广告可见性可能会降低,并且广告系统可能会降低您的应用的优先级。

为确保您为应用找到良好的平衡,请在合作伙伴界面中跟踪“展示次数份额”或“已观看展示次数份额”指标。如果该指标低于 20%,您可能需要修改缓存算法。展示次数百分比越高越好。

其他资源