---
metadata:
  - name: generator
    content: Diplodoc Platform v5.52.0
alternate:
  - https://ads.yandex.com/helpcenter/en/dev/flutter/rewarded.md
  - https://ads.yandex.com/helpcenter/ru/dev/flutter/rewarded.md
  - https://ads.yandex.com/helpcenter/zh/dev/flutter/rewarded.md
  - href: ru/dev/flutter/rewarded.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/ru/llms.txt

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

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

<!-- source: ru/dev/_includes/rewarded.md -->
Реклама с вознаграждением — популярный полноэкранный формат объявления, за просмотр которого пользователь получает поощрение.
<!-- endsource: ru/dev/_includes/rewarded.md -->

<!-- source: ru/dev/_includes/rewarded.md -->
Показ рекламы активируется пользователем, например, для получения бонуса или дополнительной жизни в игре.
<!-- endsource: ru/dev/_includes/rewarded.md -->

<!-- source: ru/dev/_includes/rewarded.md -->
Высокая мотивация пользователя делает такой формат рекламы наиболее популярным и прибыльным в бесплатных приложениях.
<!-- endsource: ru/dev/_includes/rewarded.md -->

{% cut "Внешний вид" %}

{% list tabs %}

- Комбинаторные объявления

  <iframe width="200" height="405.5" allow="autoplay" src="https://runtime.strm.yandex.ru/player/video/vplveyl3guonh5y6njtz?autoplay=1&mute=0&loop=1" frameborder="0" allowfullscreen></iframe>

- Видеореклама

  <iframe width="200" height="405.5" allow="autoplay" src="https://runtime.strm.yandex.ru/player/video/vplv2ajjjvb4sz5mqmmn?autoplay=1&mute=0&loop=1" frameborder="0" allowfullscreen></iframe>

{% endlist %}

{% endcut %}

Это руководство покажет, как интегрировать межстраничную рекламу во Flutter-приложение.
В дополнение к примерам кода и инструкции, оно также содержит рекомендации по использованию данного формата рекламы, а также ссылки на дополнительные ресурсы.


Дополнительно об интеграции рекламы с вознаграждением смотрите в видео:

@[](https://runtime.strm.yandex.ru/player/video/vplvawco7zrx5xb6hzrg?autoplay=0&mute=0)


## Пререквизит {#pre}

<!-- source: ru/dev/_includes/pre-flutter.md -->
1. Выполните шаги по интеграции Yandex Mobile Ads Flutter Plugin, описанные в [Быстром старте](https://ads.yandex.com/helpcenter/ru/dev/flutter/quick-start.md).
2. Убедитесь, что используете самую [актуальную версию Yandex Mobile Ads Flutter Plugin](https://ads.yandex.com/helpcenter/ru/dev/platforms.md), а в случае использовании медиации — наиболее свежую [версию единой сборки](https://ads.yandex.com/helpcenter/ru/dev/platforms.md).
<!-- endsource: ru/dev/_includes/pre-flutter.md -->

## Имплементация {#implement}

Основные шаги по интеграции рекламы с вознаграждением:

* Создать и настроить загрузчик рекламы `RewardedAdLoader`.
* Загрузить рекламу `RewardedAd`.
* Зарегистрировать слушатель методов обратного вызова рекламного объявления `RewardedAdEventListener`.
* Показать объявление `RewardedAd`.
* Выдать пользователю награду за просмотр рекламы.

## Особенности подключения рекламы с вознаграждением {#features}

Если вы получили ошибку в коллбэке `onAdFailedToLoad()`, не пытайтесь загрузить новое объявление снова. Если все же необходимо это сделать, ограничьте число повторных попыток загрузки рекламы. Это поможет избежать постоянных неудачных запросов и проблем с подключением в случае ограничений.

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

Для загрузки рекламы с вознаграждением необходимо создать объект `RewardedAdLoader`.

Вам потребуется идентификатор рекламного места, полученный вами в интерфейсе Рекламной сети Яндекса (adUnitId).

Расширить параметры запроса за рекламой можно через `AdRequest`, передав данные об интересах пользователя, контекстные данные страницы, локацию или другие дополнительные данные. Дополнительные контекстные данные на запросе могут значительно улучшить качество рекламы. Подробнее читайте в разделе [Таргетирование рекламы](https://ads.yandex.com/helpcenter/ru/dev/flutter/target.md).

В следующем примере показано, как загрузить рекламу с вознаграждением:

```dart
final _adLoader = RewardedAdLoader();
RewardedAd? _ad;

@override
void initState() {
  super.initState();
  YandexAds.initialize();
  _loadRewardedAd();
}

Future<void> _loadRewardedAd() async {
  try {
    _ad = await _adLoader.loadAd(
      adRequest: AdRequest(adUnitId: 'R-M-XXXXXX-Y'), // For debugging, you can use 'demo-rewarded-yandex'
    );
  } on AdRequestError catch (error) {
    // Ad failed to load with AdRequestError.
    // Attempting to load a new ad from the error handler is strongly discouraged.
  }
}
```

## Показ объявления

Реклама с вознаграждением — стимулирующий формат рекламы, который позволяет пользователю получить вознаграждение за просмотр рекламы. В качестве вознаграждения может быть дополнительная жизнь или переход на следующий уровень в игре. Формат вознаграждения определяется приложением.

Для отслеживания событий жизненного цикла рекламы с вознаграждением и получения награды, объекту класса `RewardedAd` необходимо установить слушатель методов обратного вызова `RewardedAdEventListener`.

Чтобы показать рекламу с вознаграждением, используйте метод `show()`, чтобы дождаться окончания просмотра используйте метод `waitForDismiss()`:

```dart
_showAd() async {
  _ad?.setAdEventListener(
      eventListener: RewardedAdEventListener(
    onAdShown: () {
      // Called when ad is shown.
    },
    onAdFailedToShow: (error) {
      // Called when an ad failed to show.
      // Destroy the ad so you don't show the ad a second time.
      _ad?.destroy();
      _ad = null;

      // Now you can preload the next ad.
      _loadRewardedAd();
    },
    onAdClicked: () {
      // Called when a click is recorded for an ad.
    },
    onAdDismissed: () {
      // Called when ad is dismissed.
      // Destroy the ad so you don't show the ad a second time.
      _ad?.destroy();
      _ad = null;

      // Now you can preload the next ad.
      _loadRewardedAd();
    },
    onAdImpression: (impressionData) {
      // Called when an impression is recorded for an ad.
    },
    onRewarded: (Reward reward) {
      // Called when the user can be rewarded.
    }
  ));

  await _ad?.show();
  final reward = await _ad?.waitForDismiss();
  if (reward != null) {
    print('got ${reward.amount} of ${reward.type}');
  }
}
```

## Освобождение ресурсов

Вызывайте метод `destroy()` для отработанных объявлений. Это освобождает используемые ресурсы и предотвращает утечки памяти.

Не храните ссылки на отработанные объявления.

Эти действия можно осуществить по методу обатного вызова `onAdDismissed`:

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

## Тестирование интеграции рекламы с вознаграждением {#test}

{% list tabs %}

- Android

  <!-- source: ru/dev/_includes/test-android-rewarded.md -->
  ### Использование демоблоков для тестирования рекламы {#demo-blocks}

  Для проверки корректной интеграции rewarded-объявлений и тестирования приложения используйте тестовую рекламу. Для гарантированного возврата тестовых объявлений на каждый запрос за рекламой вы можете использовать специальный демонстрационный идентификатор рекламного места.

  Демонстрационный adUnitId: `demo-rewarded-yandex`.

  {% note warning %}

  Убедитесь, что перед выкладыванием приложения в магазин вы заменили демонстрационный идентификатор рекламного места на настоящий, полученный в интерфейсе Рекламной сети Яндекса.

  {% endnote %}

  Список всех доступных демонстрационных идентификаторов рекламного места доступен в разделе [Демоблоки для тестирования](https://ads.yandex.com/helpcenter/ru/dev/android/demo-blocks.md).

  ### Проверка корректной интеграции рекламы {#test-int}

  Проверить корректность интеграции рекламы с вознаграждением можно через встроенный в SDK анализатор. Подробный отчет о проверке выведется в лог.

  Для просмотра отчета, выполните поиск по ключевому слову YandexAds в инструменте отладки Android-приложений [Logcat](https://developer.android.com/studio/command-line/logcat).
  ```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 rewarded was integrated successfully
  ```

  В случае обнаружения проблем при интеграции рекламы с вознаграждением вы получите подробный отчет о проблемах и рекомендации по их устранению.
  <!-- endsource: ru/dev/_includes/test-android-rewarded.md -->

- iOS

  ### Использование демоблоков для тестирования рекламы

  <!-- source: ru/dev/_includes/test-ios-rewarded.md -->
  Для проверки корректной интеграции рекламы и тестирования вашего приложения используйте тестовую рекламу. Для гарантированного возврата тестовых объявлений на каждый запрос за рекламой вы можете использовать специальный демонстрационный идентификатор рекламного места.

  Демонстрационный adUnitId: `demo-rewarded-yandex`.

  {% note warning %}

  Убедитесь, что перед выкладыванием приложения в магазин вы заменили демонстрационный идентификатор рекламного места на настоящий, полученный в интерфейсе Рекламной сети Яндекса.

  {% endnote %}

  Список всех доступных демонстрационных идентификаторов рекламного места доступен в разделе [Демоблоки для тестирования](https://ads.yandex.com/helpcenter/ru/dev/ios/demo-blocks.md).
  <!-- endsource: ru/dev/_includes/test-ios-rewarded.md -->

  ### Проверка корректной интеграции рекламы

  <!-- source: ru/dev/_includes/test-integration-ios.md -->
  Проверить корректность интеграции рекламы можно через нативный инструмент Console.

  Чтобы получить возможность просматривать расширенные логи, необходимо вызвать метод `enableLogging` класса `YandexAds`.

  ```swift
  YandexAds.enableLogging()
  ```

  Для просмотра логов SDK в инструменте Console установите `Subsystem = com.mobile.ads.ads.sdk`. Вы можете фильтровать логи по категории и уровню ошибки.

  В случае обнаружения проблем при интеграции рекламы вы увидите подробный отчет о проблемах и рекомендации по их устранению.

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

{% endlist %}

## Советы

### Предзагрузка объявления

<!-- source: ru/dev/_includes/preload.md -->
Загрузка рекламного объявления может занимать до нескольких секунд в зависимости от количества подключенных рекламных сетей в мобильной медиации и скорости соединения пользователя. Рекомендуется предзагружать рекламные объявления перед показом.
<!-- endsource: ru/dev/_includes/preload.md -->

Вызывайте `load` заранее и в нужный момент сразу показывайте загруженное объявление.

Чтобы начать загрузку следующего объявления сразу после показа текущего, вы можете связать этот процесс с событием `onAdDismissed()`.

<!-- source: ru/dev/_includes/cash-ads.md -->
Избыточное кеширование объявлений на экранах, которые вряд ли будут показаны, может снизить эффективность рекламы. Например, если в среднем пользователи проходят 2–3 уровня игры за раз, не стоит кешировать объявления для 6–7 экранов. Так видимость рекламы снизится, и рекламная система может деприоритизировать приложение.

Чтобы кеширование работало на пользу приложения, обращайте внимание на метрику «Доля показов» или «Доля видимых показов» в интерфейсе Рекламной сети Яндекса. Если она ниже 20%, это повод задуматься над изменением алгоритма кеширования. Чем доля показов выше, тем лучше.
<!-- endsource: ru/dev/_includes/cash-ads.md -->

## Дополнительные ресурсы {#resources}

* <!-- source: ru/dev/_includes/github-pubdev-links.md -->
  Ссылка на [pub.dev](https://pub.dev/packages/yandex_mobileads/example).

  # Android {#android}

  Ссылка на [github](https://github.com/yandexmobile/yandex-ads-sdk-android).

  # Unity {#unity}

  Ссылка на [github](https://github.com/yandexmobile/yandex-ads-unity-plugin).

  # Flutter {#flutter}

  Ссылка на [github](https://github.com/yandexmobile/yandex-ads-flutter-plugin).

  # React Native {#react-native}
  Ссылка на [github](https://github.com/yandexmobile/yandex-ads-react-native-plugin).

  # Compose Multiplatform {#compose-multiplatform}
  Link to [GitHub](https://github.com/yandexmobile/yandex-ads-multiplatform).

  # iOS {#ios}

  Ссылка на [github](https://github.com/yandexmobile/yandex-ads-sdk-ios).

  # iOS inline {#ios-inline}

  Ссылка на [github](https://github.com/yandexmobile/yandex-ads-sdk-ios/blob/master/Examples/YandexMobileAdsExample/YandexMobileAdsExample/Yandex/Banner/InlineBannerViewController.swift).

  # iOS sticky {#ios-sticky}

  Ссылка на [github](https://github.com/yandexmobile/yandex-ads-sdk-ios/blob/master/Examples/YandexMobileAdsExample/YandexMobileAdsExample/Yandex/Banner/StickyBannerViewController.swift).

  # iOS interstitial {#ios-interstitial}

  Ссылка на [github](https://github.com/yandexmobile/yandex-ads-sdk-ios/blob/master/Examples/YandexMobileAdsExample/YandexMobileAdsExample/Yandex/Interstitial/InterstitialAdViewController.swift).

  # iOS app open ad {#ios-appopenad}

  Ссылка на [github](https://github.com/yandexmobile/yandex-ads-sdk-ios/blob/master/Examples/YandexMobileAdsExample/YandexMobileAdsExample/Yandex/AppOpenAd/AppOpenAdViewController.swift).

  # iOS rewarded {#ios-rewarded}

  Ссылка на [github](https://github.com/yandexmobile/yandex-ads-sdk-ios/blob/master/Examples/YandexMobileAdsExample/YandexMobileAdsExample/Yandex/Rewarded/RewardedAdViewController.swift).

  # iOS feed ad {#ios-feedad}

  Ссылка на [github](https://github.com/yandexmobile/yandex-ads-sdk-ios/blob/master/Examples/YandexMobileAdsExample/YandexMobileAdsExample/Adapters/Yandex/FeedAd/YandexFeedAdAdapter.swift).
  <!-- endsource: ru/dev/_includes/github-pubdev-links.md -->
