---
metadata:
  - name: generator
    content: Diplodoc Platform v5.52.0
alternate:
  - https://ads.yandex.com/helpcenter/en/dev/flutter/interstitial.md
  - https://ads.yandex.com/helpcenter/ru/dev/flutter/interstitial.md
  - https://ads.yandex.com/helpcenter/zh/dev/flutter/interstitial.md
  - href: zh/dev/flutter/interstitial.md
    type: text/markdown
    title: Markdown version
  - href: llms.txt
    type: text/markdown
    title: llms.txt
---
> **Documentation Index:** Fetch the complete configuration index at https://ads.yandex.com/helpcenter/zh/llms.txt

# 插屏广告

<!-- source: zh/dev/_includes/interstitial.md -->
插屏广告是一种全屏广告格式，嵌入在应用内容中，在自然暂停时显示，例如在游戏关卡之间过渡或完成目标操作时。
<!-- endsource: zh/dev/_includes/interstitial.md -->

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

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

{% cut "外观" %}

<img src="https://yastatic.net/s3/doc-binary/src/docs/support/mobile-ads/zh/monetization/_images/interstitial-zh-ex.png" width="200">

{% endcut %}

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

## 前提条件 {#pre}

<!-- source: zh/dev/_includes/pre-flutter.md -->
1. 按照 [快速入门](https://ads.yandex.com/helpcenter/zh/dev/flutter/quick-start.md) 中的流程集成 Yandex Mobile Ads Flutter 插件。
2. 确保您运行的是最新的 [Yandex Mobile Ads Flutter 插件](https://ads.yandex.com/helpcenter/zh/dev/platforms.md) 版本。如果您使用聚合，请确保您运行的是最新版本的 [统一构建](https://ads.yandex.com/helpcenter/zh/dev/platforms.md)。
<!-- endsource: zh/dev/_includes/pre-flutter.md -->

## 实施 {#implement}

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

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

## 插屏广告集成的特点 {#features}

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

## 加载广告

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

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

您将需要来自 Yandex Advertising Network 界面 (adUnitId) 的广告单元 ID。

您可以通过 `AdRequestConfiguration`扩展广告请求参数集，在构造函数中传递用户兴趣、上下文应用数据、位置详细信息或其他数据。在请求中提供额外的上下文数据可以显著提高您的广告质量。请参阅[广告定位](https://ads.yandex.com/helpcenter/zh/dev/flutter/target.md)版块了解更多信息。

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

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

@override
void initState() {
  super.initState();
  YandexAds.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()` 方法等待观看结束。

```dart
_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` 回调方法执行以下操作：

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

## 测试插屏广告集成 {#test}

{% list tabs %}

- Android

   <!-- source: zh/dev/_includes/test-android-interstitial.md -->
   ### 使用演示广告单元进行广告测试 {#demo-blocks}

   使用测试广告来检查您的插播广告集成和应用本身。为了确保每次广告请求都能返回测试广告，您可以使用一个特殊的演示广告版位 ID。

   演示广告单元 ID：`demo-interstitial-yandex`。

   {% note warning %}

   在应用商店发布应用前，请务必将演示广告版位 ID 替换为您在 Yandex Advertising Network 接口中获取的真实 ID。

   {% endnote %}

   有关所有可用演示广告版位 ID 的列表，请参阅[用于测试的演示广告单元](https://ads.yandex.com/helpcenter/zh/dev/android/demo-blocks.md)。

   ### 测试广告集成 {#test-int}

   您可以使用 SDK 的内置分析工具检查插播广告是否已正确集成。日志中将显示包含测试结果的详细报告。

   要查看报告，请在 Android 应用调试工具 [Logcat](https://developer.android.com/studio/command-line/logcat) 中搜索关键词“YandexAds”。
   ```bash
   adb logcat -v brief '*:S YandexAds'
   ```

   如果集成成功，将返回以下消息：
   ```bash
   adb logcat -v brief '*:S YandexAds'
   mobileads$ adb logcat -v brief '*:S YandexAds'
   I/YandexAds(13719): [Integration] Ad type interstitial was integrated successfully
   ```

   如果存在任何插播广告集成问题，您将收到详细的问题报告和故障排除建议。
   <!-- endsource: zh/dev/_includes/test-android-interstitial.md -->

- iOS

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

   <!-- source: zh/dev/_includes/test-ios-interstitial.md -->
   我们建议使用测试广告来测试您的广告集成和应用本身。

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

   演示广告单元 ID：`demo-interstitial-yandex`。

   {% note warning %}

   在商店中发布您的应用程序之前，确保将演示版位 ID 替换为您在 Yandex Advertising Network 界面中获得的真实 ID。

   {% endnote %}

   您可以在 [用于测试的演示广告单元](https://ads.yandex.com/helpcenter/zh/dev/ios/demo-blocks.md) 部分找到可用的演示广告版位 ID 列表。
   <!-- endsource: zh/dev/_includes/test-ios-interstitial.md -->

   ### 测试广告集成

   <!-- source: zh/dev/_includes/test-integration-ios.md -->
   您可以使用本机控制台工具测试广告集成。

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

   ```swift
   YMAMobileAds.enableLogging()
   ```

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

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

   <img src= "https://yastatic.net/s3/doc-binary/src/dev/mobile-ads/common/integration-ios-2.png">
   <!-- endsource: zh/dev/_includes/test-integration-ios.md -->

{% endlist %}

## 提示

### 广告预加载

<!-- source: zh/dev/_includes/preload.md -->
加载广告可能需要几秒钟的时间，具体取决于移动聚合中对接的广告网络数量和用户的互联网速度。我们建议在展示广告之前预加载广告。
<!-- endsource: zh/dev/_includes/preload.md -->

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

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

<!-- source: zh/dev/_includes/cash-ads.md -->
如果您在太多不太可能显示的屏幕上缓存广告，您的广告效果可能会下降。例如，如果用户每次会话完成 2-3 个游戏关卡，则您不应缓存 6-7 个屏幕的广告。否则，您的广告可见性可能会降低，并且广告系统可能会降低您的应用的优先级。

为确保您为应用程序找到良好的平衡，请在 Yandex Advertising Network 界面中跟踪“收视数比例”或“可见收视数比例”指标。如果它低于 20%，可能需要修改您的缓存算法。收视数比例越高越好。
<!-- endsource: zh/dev/_includes/cash-ads.md -->

## 其他资源 {#resources}

* <!-- source: zh/dev/_includes/github-pubdev-links.md -->
  [Pub.dev](https://pub.dev/packages/yandex_mobileads/example) 链接。
  <!-- endsource: zh/dev/_includes/github-pubdev-links.md -->

