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


[//]: # (Эта страница переводится также на бразильский португальский — pt-BR)

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

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

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

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

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

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


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

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


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

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

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

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

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

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

1. Все вызовы методов Yandex Mobile Ads SDK необходимо выполнять из главного потока.

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

3. Рекомендуется держать сильную ссылку на загрузчик и рекламу на всем протяжении жизни экрана, в рамках которого происходит взаимодействие с рекламой.

4. Рекомендуется использовать один инстанс `RewardedAdLoader` для всех загрузок рекламных объявлений для улучшения производительности.

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

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

Для этого потребуется Activity или Application context.

Для уведомления об успешной или неудачной загрузке рекламы объекту класса `RewardedAdLoader` необходимо установить слушатель методов обратного вызова `RewardedAdLoadListener`

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

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

После загрузки рекламного объявления (вызов метода `onAdLoaded(rewardedAd: RewardedAd)`) сохраните ссылку на загруженную рекламу `RewardedAd` до окончания показа.

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

{% list tabs %}

   - Kotlin

     ```kotlin
     class RewardedAdActivity : AppCompatActivity(R.layout.activity_rewarded_ad) {
         private var rewardedAd: RewardedAd? = null
         private var rewardedAdLoader: RewardedAdLoader? = null
         private lateinit var binding: ActivityRewardedAdBinding

         override fun onCreate(savedInstanceState: Bundle?) {
             super.onCreate(savedInstanceState)
             binding = ActivityRewardedAdBinding.inflate(layoutInflater)
             setContentView(binding.root)

             // Rewarded ads loading should occur after initialization of the SDK.
             // Initialize SDK as early as possible, for example in Application.onCreate or Activity.onCreate
             rewardedAdLoader = RewardedAdLoader(this).apply {
                 setAdLoadListener(object : RewardedAdLoadListener {
                     override fun onAdLoaded(ad: RewardedAd) {
                         rewardedAd = ad
                         // The ad was loaded successfully. Now you can show loaded ad.
                     }

                     override fun onAdFailedToLoad(adRequestError: AdRequestError) {
                         // Ad failed to load with AdRequestError.
                         // Attempting to load a new ad from the onAdFailedToLoad() method is strongly discouraged.
                     }
                 })
             }
             loadRewardedAd()
         }

         private fun loadRewardedAd() {
             val adRequestConfiguration = AdRequestConfiguration.Builder("your-ad-unit-id").build()
             rewardedAdLoader?.loadAd(adRequestConfiguration)
         }
     }
     ```

   - Java

     ```java
     public class RewardedAdActivity extends AppCompatActivity {
         @Nullable
         private RewardedAd mRewardedAd = null;
         @Nullable
         private RewardedAdLoader mRewardedAdLoader = null;
         private ActivityRewardedAdBinding mBinding;

         public RewardedAdActivity() {
             super(R.layout.activity_rewarded_ad);
         }

         @Override
         protected void onCreate(@Nullable Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             mBinding = ActivityRewardedAdBinding.inflate(getLayoutInflater());
             setContentView(mBinding.getRoot());

             // Ads loading should occur after initialization of the SDK.
             // Initialize SDK as early as possible, for example in Application.onCreate or Activity.onCreate
             mRewardedAdLoader = new RewardedAdLoader(this);
             mRewardedAdLoader.setAdLoadListener(new RewardedAdLoadListener() {
                 @Override
                 public void onAdLoaded(@NonNull final RewardedAd rewardedAd) {
                     mRewardedAd = rewardedAd;
                     // The ad was loaded successfully. Now you can show loaded ad.
                 }

                 @Override
                 public void onAdFailedToLoad(@NonNull final AdRequestError adRequestError) {
                     // Ad failed to load with AdRequestError.
                     // Attempting to load a new ad from the onAdFailedToLoad() method is strongly discouraged.
                 }
             });
             loadRewardedAd();
         }

         private void loadRewardedAd() {
             if (mRewardedAdLoader != null ) {
                 final AdRequestConfiguration adRequestConfiguration =
                     new AdRequestConfiguration.Builder("your-ad-unit-id").build();
                 mRewardedAdLoader.loadAd(adRequestConfiguration);
             }
         }
     }
     ```
{% endlist %}

## Показ объявления {#ad-view}

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

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

Для показа рекламного объявления потребуется передать Activity в метод show загруженного рекламного объявления:

{% list tabs %}

   - Kotlin

     ```kotlin
     private fun showAd() {
        rewardedAd?.apply {
            setAdEventListener(object : RewardedAdEventListener {
                override fun onAdShown() {
                    // Called when ad is shown.
                }

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

                // Clean resources after Ad failed to show
                    rewardedAd?.setAdEventListener(null)
                    rewardedAd = null

                // Now you can preload the next rewarded ad.
                    loadRewardedAd()
                }

                override fun onAdDismissed() {
                    // Called when ad is dismissed.
                    // Clean resources after Ad dismissed
                    rewardedAd?.setAdEventListener(null)
                    rewardedAd = null

                    // Now you can preload the next rewarded ad.
                    loadRewardedAd()
                }

                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) {
                    // Called when the user can be rewarded.
                }
            })
            show(this@Activity)
        }
     }
     ```

   - Java

     ```java
     private void showAd() {
         if (mRewardedAd != null) {
             mRewardedAd.setAdEventListener(new RewardedAdEventListener() {
                 @Override
                 public void onAdShown() {
                     // Called when ad is shown.
                 }

                 @Override
                 public void onAdFailedToShow(@NonNull final AdError adError) {
                     // Called when an ad failed to show.

                     // Clean resources after Ad failed to show
                   if (mRewardedAd != null) {
                       mRewardedAd.setAdEventListener(null);
                       mRewardedAd = null;
                   }

                   // Now you can preload the next ad.
                   loadRewardedAd();
                 }

                 @Override
                 public void onAdDismissed() {
                     // Called when ad is dismissed.
                     // Clean resources after Ad dismissed
                     if (mRewardedAd != null) {
                         mRewardedAd.setAdEventListener(null);
                         mRewardedAd = null;
                     }

                     // Now you can preload the next ad.
                     loadRewardedAd();
                 }

                 @Override
                 public void onAdClicked() {
                     // Called when a click is recorded for an ad.
                 }

                 @Override
                 public void onAdImpression(@Nullable final ImpressionData impressionData) {
                     // Called when an impression is recorded for an ad.
                 }

                 @Override
                 public void onRewarded(@NonNull final Reward reward) {
                     // Called when the user can be rewarded.
                 }
             });
             mRewardedAd.show(this);
         }
     }
     ```
{% endlist %}

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

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

{% list tabs %}

   - Kotlin

     ```kotlin
     override fun onDestroy() {
         super.onDestroy()
         rewardedAdLoader?.setAdLoadListener(null)
         rewardedAdLoader = null
         destroyRewardedAd()
     }

     private fun destroyRewardedAd() {
         rewardedAd?.setAdEventListener(null)
         rewardedAd = null
     }
     ```

   - Java

     ```java
     @Override
     protected void onDestroy() {
         super.onDestroy();
         if (mRewardedAdLoader != null) {
             mRewardedAdLoader.setAdLoadListener(null);
             mRewardedAdLoader = null;
         }
         destroyRewardedAd();
     }

     private void destroyRewardedAd() {
         if (mRewardedAd != null) {
             mRewardedAd.setAdEventListener(null);
             mRewardedAd = null;
         }
     }
     ```
{% endlist %}

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

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

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

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

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

{% note warning %}

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

{% endnote %}

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

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

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

Данный инструмент проверяет корректность подключения rewarded рекламы и выводит в лог подробный отчет.
Для просмотра отчета, выполните поиск по ключевому слову "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/_includes7/test-android-rewarded.md -->

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

* <!-- source: ru/dev/_includes7/github-pubdev-links.md -->
  Ссылка на [github](https://github.com/yandexmobile/yandex-ads-sdk-android).
  <!-- endsource: ru/dev/_includes7/github-pubdev-links.md -->
