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

Важно

Обязательно обновите версии используемых адаптеров на актуальные (Медиация Яндекса). Иначе возможны ошибки неправильной интеграции адаптеров и реклама не будет показана.

Баннеры

Класс AdSize переименован в BannerAdSize. Удален метод flexibleSize(int width, int maxHeight).

Используйте методы в зависимости от типа рекламного объявления:

Для создания адаптивного sticky-баннера — метод BannerAdSize.stickySize(int width).

Адаптивный sticky-баннер — небольшое, автоматически обновляемое рекламное объявление, которое располагается внизу или вверху экрана приложения.

Баннер не перекрывает основной контент приложения и часто используется в приложениях-играх.

Высота sticky-баннера определяется автоматически, адаптируясь под размер экрана устройства и не превышает 15% высоты экрана.

Важно

В адаптивном sticky-баннере с версии 6.0.0 появилось автообновление.

Если у вас ранее было реализовано автообновление для sticky-баннера, его следует отключить.

Для создания адаптивного inline-баннера — метод BannerAdSize.inlineSize(int width, int maxHeight).

Адаптивный inline-баннер — гибкий формат баннерной рекламы, обеспечивающий максимальную эффективность за счет оптимизации размера рекламы для каждого устройства.

Высота баннера подбирается автоматически и может достигать высоты экрана устройства.

Как правило, такой формат используется в приложениях-лентах или там, где допустимо обеспечить основной фокус на рекламе.

Реклама с вознаграждением

Был изменен подход к созданию и загрузке рекламы. Теперь есть объект-загрузчик RewardedAdLoader, который занимается загрузкой рекламных объявлений, и объект рекламы RewardedAd, получаемый из события загрузки рекламного объявления onAdLoaded.

Загрузка рекламы

SDK 5

Один объект на загрузку и показ рекламного объявления:

final ad = await RewardedAd.create(
  adUnitId: 'your-ad-unit-id',
  onAdLoaded: () {
    /* Do something */
  },
  onAdFailedToLoad: (error) {
      /* Do something */
  },
);
await ad.load(adRequest: AdRequest());

SDK 6

Загрузчик RewardedAdLoader для загрузки нескольких рекламных объявлений.

late final Future<RewardedAdLoader> _adLoader =
      _createRewardedAdLoader();
RewardedAd? _ad;

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

Future<void> _loadRewardedAd() async {
  final adLoader = await _adLoader;
  await adLoader.loadAd(adRequestConfiguration: AdRequestConfiguration(adUnitId: 'your-ad-unit-id'));
}

Показ рекламы

SDK 5

Перед показом нужно проверить, загружена ли реклама.

RewardedAd? _ad;

Future<void> _showRewardedAd() async {
  final ad = _ad;
  if (ad != null && ad.isLoaded) {
    await ad.show();
    var reward = await ad.waitForDismiss();
  }
}

SDK 6

Проверка, загружена ли реклама, не требуется. Рекламное объявление готово к показу после получения его в методе обратного вызова onAdLoaded().

RewardedAd? _ad;

Future<void> _showRewardedAd() async {
  final ad = _ad;
  if (ad != null) {
    _setAdEventListener(ad);
    await ad.show();
    var reward = await ad.waitForDismiss();
  }
}

Подписка на события жизненного цикла рекламы

SDK 5

Все события приходят в едином объекте RewardedAd.

RewardedAd.create(
  onAdLoaded: () {},
  onAdFailedToLoad: (AdLoadError error) {},
  onAdShown: () {},
  onAdDismissed: () {},
  onRewarded: (Reward reward) {},
  onAdClicked: () {},
  onLeftApplication: () {},
  onReturnedToApplication: () {},
  onImpression: (String? impressionData) {},
);

SDK 6

Cобытия загрузки рекламы приходят в объекте RewardedAdLoader, а события показа — в объекте RewardedAdEventListener.

Объект RewardedAdEventListener устанавливается через метод rewardedAd.setAdEventListener.

Унифицированы названия событий. Удалены события onLeftApplication и onReturnedToApplication.

Добавлено событие onAdFailedToShow.

Переименовано событие onImpression в onAdImpression.

RewardedAdLoader.create(
  onAdLoaded: (RewardedAd rewardedAd) {},
  onAdFailedToLoad: (error) {},
);

void _setAdEventListener(RewardedAd ad) {
  ad.setAdEventListener(
      eventListener: RewardedAdEventListener(
          onAdShown: () {},
          onAdFailedToShow: (AdError error) {},
          onAdDismissed: () {},
          onAdClicked: () {},
          onAdImpression: (ImpressionData? data) {},
          onRewarded: (Reward reward) {}
      )
  );
}

Межстраничная реклама

Был изменен подход к созданию и загрузке рекламы. Теперь есть объект-загрузчик InterstitialAdLoader, который занимается загрузкой рекламных объявлений, и объект рекламы Interstitial, получаемый из события загрузки рекламного объявления onAdLoaded.

Загрузка рекламы

SDK 5

Один объект на загрузку и показ рекламного объявления:

final ad = await InterstitialAd.create(
  adUnitId: 'your-ad-unit-id',
  onAdLoaded: () {
    /* Do something */
  },
  onAdFailedToLoad: (error) {
      /* Do something */
  },
);
await ad.load(adRequest: AdRequest());

SDK 6

Загрузчик InterstitialAdLoader для загрузки нескольких рекламных объявлений.

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 5

Перед показом нужно проверить, загружена ли реклама.

InterstitialAd? _ad;

Future<void> _showInterstitialAd() async {
  final ad = _ad;
  if (ad != null && ad.isLoaded) {
    await ad.show();
    await ad.waitForDismiss();
  }
}

SDK 6

Проверка, загружена ли реклама, не требуется. Рекламное объявление готово к показу после получения его в методе обратного вызова onAdLoaded().

InterstitialAd? _ad;

Future<void> _showInterstitialAd() async {
  final ad = _ad;
  if (ad != null) {
    _setAdEventListener(ad);
    await ad.show();
    await ad.waitForDismiss();
  }
}

Подписка на события жизненного цикла рекламы

SDK 5

Все события приходят в едином объекте InterstitialAd.

InterstitialAd.create(
  onAdLoaded: () {},
  onAdFailedToLoad: (AdLoadError error) {},
  onAdShown: () {},
  onAdDismissed: () {},
  onAdClicked: () {},
  onLeftApplication: () {},
  onReturnedToApplication: () {},
  onImpression: (String? impressionData) {},
);

SDK 6

Cобытия загрузки рекламы приходят в объекте InterstitialAdLoader, а события показа в объекте InterstitialAdEventListener.

Объект InterstitialAdEventListener устанавливается через метод interstitialAd.setAdEventListener.

Унифицированы названия событий. Удалены события onLeftApplication и onReturnedToApplication.

Добавлено событие onAdFailedToShow.

Переименовано событие onImpression в onAdImpression.

InterstitialAdLoader.create(
  onAdLoaded: (InterstitialAd interstitialAd) {},
  onAdFailedToLoad: (error) {},
);

void _setAdEventListener(InterstitialAd ad) {
  ad.setAdEventListener(
      eventListener: InterstitialAdEventListener(
          onAdShown: () {},
          onAdFailedToShow: (AdError error) {},
          onAdDismissed: () {},
          onAdClicked: () {},
          onAdImpression: (ImpressionData? data) {}
      )
  );
}

App Open Ad

Добавлен новый формат рекламных объявлений — App Open Ad. Подбробнее о нем можно узнать в разделе Реклама при открытии приложения.

Полные примеры интерации можно посмотреть здесь:

Медиация Яндекса

Важно

Обязательно обновите версии используемых адаптеров на актуальные (Медиация Яндекса). Иначе возможны ошибки неправильной интеграции адаптеров и реклама не будет показана.

Артефакт com.yandex.ads.mediation:mobileads-admob был переименован в com.yandex.ads.mediation:mobileads-google.

Если вы используете единую сборку медиации, ничего делать не нужно. В случае подключения адаптеров по отдельности необходимо заменить gradle-зависимость вашего проекта.

SDK 5

implementation 'com.yandex.ads.mediation:mobileads-admob:<version>'

SDK 6

implementation 'com.yandex.ads.mediation:mobileads-google:<version>'

Адаптеры AdMobYandexMobileAdsAdapters были переименованы в GoogleYandexMobileAdsAdapters. Если вы используете единую сборку медиации, ничего делать не нужно. В случае подключения адаптеров по отдельности необходимо внести правки в Podfile вашего проекта.

SDK 5

pod 'AdMobYandexMobileAdsAdapters'

SDK 6

pod 'GoogleYandexMobileAdsAdapters'