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

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

<!-- 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 %}

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

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

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

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

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

1. Создайте загрузчик рекламы с помощью `rememberRewardedAdLoader()`.
2. Загрузить рекламу через suspend-функцию `loadAd()`.
3. При необходимости установите `RewardedAdEventListener` на загруженное объявление перед вызовом `show()`.
4. Покажите рекламу используя метод `show()`.

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

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

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

Используйте `rememberRewardedAdLoader()` и `loadAd` с `AdRequest`, где указан `adUnitId` из интерфейса Рекламной сети Яндекса.

Запрос расширяйте через `AdRequest` (`targeting`, `parameters`, `preferredTheme` и т. д.). Дополнительный контекст улучшает качество рекламы. Подробнее — в разделе [Таргетирование рекламы](https://ads.yandex.com/helpcenter/ru/dev/compose-multiplatform/target.md).

Пример загрузки:

```kotlin
@Composable
fun RewardedBlock(adUnitId: String) {
    val loader = rememberRewardedAdLoader()
    val scope = rememberCoroutineScope()
    var rewardedAd by remember { mutableStateOf<RewardedAd?>(null) }
    var isLoading by remember { mutableStateOf(false) }

    Button(
        onClick = {
            isLoading = true
            scope.launch {
                try {
                    rewardedAd = loader.loadAd(AdRequest(adUnitId = adUnitId))
                } catch (e: AdLoadException) {
                    // Ошибка загрузки: e.error (AdRequestError). Повтор без ограничений не рекомендуется.
                }
                isLoading = false
            }
        },
        enabled = !isLoading,
    ) {
        Text(if (isLoading) "Загрузка..." else "Загрузить с вознаграждением")
    }

    Button(
        onClick = {
            rewardedAd?.show()
            rewardedAd = null
        },
        enabled = rewardedAd != null,
    ) {
        Text("Показать с вознаграждением")
    }
}
```

Для отладки подойдет `adUnitId` `'demo-rewarded-yandex'`.

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

Реклама с вознаграждением — стимулирующий формат: пользователь получает награду за просмотр (дополнительная жизнь, переход на уровень и т. п.). Конкретную награду определяет приложение.

Чтобы отслеживать жизненный цикл и выдавать награду, перед `show()` установите на `RewardedAd` слушатель `RewardedAdEventListener`.

```kotlin
val ad = rewardedAd ?: return
ad.setAdEventListener(
    object : RewardedAdEventListener {
        override fun onAdShown() {
            // Called when an ad is shown.
        }

        override fun onAdFailedToShow(adError: AdError) {
            // Called when an ad failed to show.
        }

        override fun onAdDismissed() {
            // Called when ad is dismissed. Preload the next rewarded ad if appropriate.
        }

        override fun onAdClicked() {
            // Called when a click is recorded for an ad.
        }

        override fun onAdImpression(impressionData: ImpressionData?) {
            // Called when an impression is recorded for an ad.
        }

        override fun onRewarded(reward: Reward) {
            // Grant currency: reward.type, reward.amount
        }
    },
)
ad.show()
```

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

После `onAdDismissed` или `onAdFailedToShow` сбрасывайте ссылки и при необходимости загружайте следующий креатив. Не храните сильные ссылки на уже показанные объявления.

## Тестирование интеграции рекламы с вознаграждением {#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 -->

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

Чтобы начать загрузку следующего объявления сразу после показа текущего, свяжите этот процесс с событием `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 -->
  Link to [GitHub](https://github.com/yandexmobile/yandex-ads-multiplatform).
  <!-- endsource: ru/dev/_includes/github-pubdev-links.md -->
