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


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

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

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

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

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


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

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

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

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

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

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

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

2. Попытка загрузить новое объявление при получении ошибки загрузки настоятельно не рекомендуется. При использовании completion handler это case `.failure`, при использовании Swift Concurrency — блок `catch`. Если вам необходимо повторить загрузку из обработчика ошибки, ограничьте повторные попытки загрузки рекламы, чтобы избежать постоянных неудачных запросов за рекламой в случае ограничений подключения к сети.

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

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

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

Для загрузки рекламы используйте метод `loadAd(with:completion:)` с completion handler или Swift Concurrency вариант `loadAd(with:)`.

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

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

{% list tabs %}

- Swift Concurrency

  ```swift
  final class RewardedViewController: UIViewController {
      private lazy var rewardedAdLoader = RewardedAdLoader()
      private var rewardedAd: RewardedAd?

      func loadAd() async {
          let request = AdRequest(adUnitID: "R-M-XXXXX-YY")
          do {
              let ad = try await rewardedAdLoader.loadAd(with: request)
              rewardedAd = ad
              ad.delegate = self
          } catch {
              // Ошибка загрузки
          }
      }
  }
  ```

- Completion handler

  ```swift
  final class RewardedViewController: UIViewController {
      private lazy var rewardedAdLoader = RewardedAdLoader()
      private var rewardedAd: RewardedAd?

      func loadAd() {
          let request = AdRequest(adUnitID: "R-M-XXXXX-YY")
          rewardedAdLoader.loadAd(with: request) { [weak self] result in
              switch result {
              case .success(let ad):
                  self?.rewardedAd = ad
                  ad.delegate = self
              case .failure:
                  // Ошибка загрузки
                  break
              }
          }
      }
  }
  ```

{% endlist %}

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

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

После успешной загрузки рекламы с вознаграждением сохраните объявление и отобразите его.

  ```swift
  final class RewardedViewController: UIViewController {
      private lazy var rewardedAdLoader = RewardedAdLoader()
      private var rewardedAd: RewardedAd?

      func showAd() {
          rewardedAd?.show(from: self)
      }
  }
  ```

## Выдача награды {reward-send}

Если показ объявления успешно засчитан, будет вызван метод `rewardedAd(_ rewardedAd: RewardedAd, didReward reward: Reward)` делегата `RewardedAdDelegate`. Используйте его, чтобы выдать награду пользователю приложения.

```swift
final class RewardedViewController: UIViewController {
    private var rewardedAd: RewardedAd?
}

extension RewardedViewController: RewardedAdDelegate {
    func rewardedAd(_ rewardedAd: RewardedAd, didReward reward: Reward) {
        sendReward(reward)
    }
}
```

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

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

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

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

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