---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://ads.yandex.com/helpcenter/en/dev/flutter/release/8-0-0-migration.md
  - https://ads.yandex.com/helpcenter/ru/dev/flutter/release/8-0-0-migration.md
  - https://ads.yandex.com/helpcenter/zh/dev/flutter/release/8-0-0-migration.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ads.yandex.com/helpcenter/zh/llms.txt

# 迁移至版本 8 的指南

## 一般变更

已将 `MobileAds` 类重命名为 `YandexAds`。

重命名了以下属性和方法：

#|
|| **SDK 7** | **SDK 8** ||
|| `MobileAds.setLocationConsent(bool)` | `YandexAds.setLocationTracking(bool)` ||
|| `MobileAds.setAgeRestrictedUser(bool)` | `YandexAds.setAgeRestricted(bool)` ||
|#

## 广告请求

移除了 `AdRequestConfiguration` 类。 改用 `AdRequest`，它现在提供 `adUnitId`。

定位字段（`age`、`contextQuery`、`contextTags`、`gender`、`location`）已从 `AdRequest` 移至新的 `AdTargeting` 类。

#|
||
广告请求
| **SDK 7**

```dart
final adRequestConfiguration = AdRequestConfiguration(
  adUnitId: 'your-ad-unit-id',
  age: 25,
  contextQuery: 'query',
  parameters: {'key': 'value'},
);

await adLoader.loadAd(
  adRequestConfiguration: adRequestConfiguration,
);
```

**SDK 8**

```dart
final adRequest = AdRequest(
  adUnitId: 'your-ad-unit-id',
  targeting: AdTargeting(
    age: 25,
    contextQuery: 'query',
  ),
  parameters: {'key': 'value'},
);

final ad = await adLoader.loadAd(adRequest: adRequest);
```
||
|#

## 全屏广告（插屏广告、激励广告、开屏广告）

我们更改了创建和加载全屏广告的方法。 加载器构造函数现在是同步的，`loadAd` 以 `Future` 形式直接返回已加载的广告。

移除了 `InterstitialAdLoadListener`、`RewardedAdLoadListener` 和 `AppOpenAdLoadListener` 类。

#|
||
广告加载
| **SDK 7**

通过回调进行异步创建：

```dart
late final Future<InterstitialAdLoader> _adLoader =
      _createInterstitialAdLoader();
InterstitialAd? _ad;

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: 'your-ad-unit-id'));
}
```

**SDK 8**

同步创建，`loadAd` 返回已加载的广告或抛出 `AdRequestError`：

```dart
final _adLoader = InterstitialAdLoader();
InterstitialAd? _ad;

Future<void> _loadInterstitialAd() async {
  try {
    _ad = await _adLoader.loadAd(
      adRequest: AdRequest(adUnitId: 'your-ad-unit-id'),
    );
  } on AdRequestError catch (error) {
    // 广告因 AdRequestError 无法加载。
    // 强烈建议不要尝试从错误处理程序加载新广告。
  }
}
```

||
|#

同样的更改也适用于 `RewardedAdLoader` 和 `AppOpenAdLoader`。

## 横幅广告

我们更改了创建和加载横幅广告的方法。 横幅广告构造函数不再接受 `adRequest` 或回调。 现在需要通过 `load(AdRequest)` 显式进行加载。 广告状态和事件通过数据流进行传递。

#|
||
横幅广告创建和加载
| **SDK 7**

```dart
BannerAd? _banner;

void _createBanner() {
  _banner = BannerAd(
    adSize: BannerAdSize.stickySize(width),
    adRequest: AdRequest(),
    onAdLoaded: () {
      // 广告已加载
    },
    onAdFailedToLoad: (error) {
      // 广告无法加载
    },
    onAdClicked: () {},
    onImpression: (data) {},
  );
}
```

**SDK 8**

```dart
BannerAd? _banner;

void _createBanner() {
  final banner = BannerAd(adSize: BannerAdSize.stickySize(width));

  banner.loadStateStream.listen((state) {
    if (state is BannerAdLoadStateLoaded) {
      // 广告已加载
    } else if (state is BannerAdLoadStateError) {
      // 广告无法加载
    }
  });

  banner.events.listen((event) {
    if (event is BannerAdClickedEvent) {
      // 广告已点击
    } else if (event is BannerAdImpressionEvent) {
      // 展示
    }
  });

  banner.load(AdRequest(adUnitId: 'your-ad-unit-id'));
  _banner = banner;
}
```

||
||
横幅广告销毁
| **SDK 7**

```dart
_banner?.destroy();
```

**SDK 8**

```dart
await _banner?.destroy();
```

||
|#

## 广告信息

`AdInfo` 类已被重构。 移除了 `adSize` 字段。 添加了 `creatives`、`extraData` 和 `partnerText` 字段。

#|
|| **SDK 7** | **SDK 8** ||
|| `AdInfo.adSize` | 已移除 ||
|| — | `AdInfo.creatives`（`List<Creative>`） ||
|| — | `AdInfo.extraData`（`String?`） ||
|| — | `AdInfo.partnerText`（`String?`） ||
|#

## 已移除事件

移除了 `onLeftApplication`、`onReturnedToApplication` 和 `onAdClose` 回调事件。


