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

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

<!-- source: ru/easy/_includes/sdk-guide.md -->
Реклама с вознаграждением (Rewarded) — это полноэкранный рекламный формат, за просмотр которого пользователь получает бонус или награду (например: внутриигровые монеты, доступ к премиум-функциям, повтор попытки и т. д.).

{% note info %}

Пользователь принимает решение **самостоятельно** — не смотреть рекламу или дождаться получения награды.

{% endnote %}
<!-- endsource: ru/easy/_includes/sdk-guide.md -->

<!-- source: ru/easy/_includes/notes-android-easy-guide.md -->
{% note info %}

Пример работы всех типов форматов есть в [демопроекте](https://ads.yandex.com/helpcenter/ru/easy/integration/android/testing.md#demo).

{% endnote %}
<!-- endsource: ru/easy/_includes/notes-android-easy-guide.md -->

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

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

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

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

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

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

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

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

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

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

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

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

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

Расширить параметры запроса за рекламой можно через `AdRequest.Builder()`, передав в запросе данные об интересах пользователя, контекстные данные страницы, локацию или другие дополнительные данные. Дополнительные контекстные данные на запросе могут значительно улучшить качество рекламы.

После загрузки рекламного объявления (вызов метода `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)
             loadRewardedAd()
         }

         private fun loadRewardedAd() {
             val adRequest = AdRequest.Builder("your-ad-unit-id").build()
             rewardedAdLoader?.loadAd(adRequest, 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.
                 }
             })
         }
     }
     ```

   - 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);
             loadRewardedAd();
         }

         private void loadRewardedAd() {
             if (mRewardedAdLoader != null) {
                 final AdRequest adRequest =
                     new AdRequest.Builder("your-ad-unit-id").build();
                 mRewardedAdLoader.loadAd(adRequest, 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.
                     }
                 });
             }
         }
     }
     ```
{% endlist %}

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

Для отслеживания событий жизненного цикла 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)` для отработанных объявлений.
Это освобождает используемые ресурсы и предотвращает утечки памяти.

{% list tabs %}

   - Kotlin

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

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

   - Java

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

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

## Проверка интеграции

<!-- source: ru/easy/_includes/notes-android-easy-guide.md -->
Соберите и запустите проект. Успешную интеграцию SDK можно проверить в **Logcat** по ключевому слову `YandexAds`:
<!-- endsource: ru/easy/_includes/notes-android-easy-guide.md -->

```
[Integration] Ad type rewarded was integrated successfully
```
