---
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/ru/llms.txt

<!--
Используется в Boost: boost/ru/ad-monetization/dev/flutter
-->

# Руководство по миграции на версию 8

Новая 8-я версия плагина Yandex Mobile Ads для Flutter вносит в API ряд изменений, направленных на упрощение интеграции и единообразие с нативными SDK.

## Основные изменения

Класс `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` удалены — вместо колбэков используйте результат `loadAd` и обработку ошибок.

#|
||
Загрузка рекламы
| **SDK 7**

Асинхронное создание загрузчика с колбэками:

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

Future<InterstitialAdLoader> _createInterstitialAdLoader() {
  return InterstitialAdLoader.create(
    onAdLoaded: (InterstitialAd interstitialAd) {
      // The ad was loaded successfully. Now you can show loaded ad
      _ad = interstitialAd;
    },
    onAdFailedToLoad: (error) {
      // Ad failed to load with AdRequestError.
      // Attempting to load a new ad from the onAdFailedToLoad() method is strongly discouraged.
    },
  );
}

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) {
    // Ad failed to load with AdRequestError.
    // Attempting to load a new ad from the error handler is strongly discouraged.
  }
}
```

||
|#

Те же правила применяются к `RewardedAdLoader` и `AppOpenAdLoader`.

## Баннеры

Изменен подход к созданию и загрузке баннеров: конструктор больше не принимает `adRequest` и обработчики событий. Объявление загружается отдельным вызовом `load(AdRequest)`. О ходе загрузки и событиях показа сообщают подписки на потоки `loadStateStream` и `events`.

#|
||
Создание и загрузка баннера
| **SDK 7**

```dart
BannerAd? _banner;

void _createBanner() {
  _banner = BannerAd(
    adSize: BannerAdSize.stickySize(width),
    adRequest: AdRequest(),
    onAdLoaded: () {
      // Ad loaded
    },
    onAdFailedToLoad: (error) {
      // Ad failed to load
    },
    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) {
      // Ad loaded
    } else if (state is BannerAdLoadStateError) {
      // Ad failed to load
    }
  });

  banner.events.listen((event) {
    if (event is BannerAdClickedEvent) {
      // Ad clicked
    } else if (event is BannerAdImpressionEvent) {
      // Impression
    }
  });

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

||
||
Уничтожение баннера
| **SDK 7**

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

**SDK 8**

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

||
|#

## Класс AdInfo

Структура класса `AdInfo` обновлена: поле `adSize` удалено, добавлены поля `creatives`, `extraData` и `partnerText`.

#|
|| **SDK 7** | **SDK 8** ||
|| `AdInfo.adSize` | Удалено ||
|| — | `AdInfo.creatives` (`List<Creative>`) ||
|| — | `AdInfo.extraData` (`String?`) ||
|| — | `AdInfo.partnerText` (`String?`) ||
|#

## Удаленные события

Больше не поддерживаются события `onLeftApplication`, `onReturnedToApplication` и `onAdClose` — соответствующие обработчики из кода нужно убрать.


