---
metadata:
  - name: generator
    content: Diplodoc Platform v5.55.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: en/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/en/llms.txt

# Rewarded ads

<!-- source: en/dev/_includes/rewarded.md -->
Rewarded ads are a popular fullscreen ad format where users receive incentives for viewing ads.
<!-- endsource: en/dev/_includes/rewarded.md -->

<!-- source: en/dev/_includes/rewarded.md -->
Ad impressions are opt-in: for example, users can initiate them to get game bonuses or extra lives.
<!-- endsource: en/dev/_includes/rewarded.md -->

<!-- source: en/dev/_includes/rewarded.md -->
Strong user motivation makes this ad format the most popular and profitable adoption in free apps.
<!-- endsource: en/dev/_includes/rewarded.md -->

{% cut "Appearance" %}

{% list tabs %}

- Text and image ads

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

- Video ads

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

{% endlist %}

{% endcut %}

This guide will show how to integrate rewarded ads into iOS apps. In addition to code examples and instructions, it contains format-specific recommendations and links to additional resources.


## Prerequisite {#pre}

<!-- source: en/dev/_includes/pre-ios.md -->
1. Follow the SDK integration steps described in [Quick start](https://ads.yandex.com/helpcenter/en/dev/ios/quick-start.md).
2. [Initialize](https://ads.yandex.com/helpcenter/en/dev/ios/quick-start.md#init) your ad SDK in advance.
3. Make sure you're running the latest [Yandex Mobile Ads SDK](https://ads.yandex.com/helpcenter/en/dev/platforms.md) version. If you're using mediation, make sure you're also running the latest version of the [unified build](https://ads.yandex.com/helpcenter/en/dev/platforms.md).
<!-- endsource: en/dev/_includes/pre-ios.md -->

## Implementation {#implement}

Key steps for integrating rewarded ads:

* Create and configure the `RewardedAdLoader` ad loader.
* Load the ad.
* If needed, set a delegate for the ad object and implement the required `RewardedAdDelegate` methods.
* Show the ad.
* Reward the user for viewing the ad.

## Features of rewarded ad integration {#features}

1. All calls to Yandex Mobile Ads SDK methods must be made from the main thread.

2. We strongly advise against attempting to load a new ad when a load error occurs. With a completion handler, that is a `.failure` result; with Swift Concurrency, handle it in `catch`. If you need to retry from the error handler, limit ad load retries to avoid recurring failed ad requests due to network connection constraints.

3. We recommend that you keep a strong reference to the ad and its loader throughout the lifecycle of the screen interacting with the ad.

## Loading ads {#load}

To load rewarded ads, create an instance of the `RewardedAdLoader` class.

Use `loadAd(with:completion:)` with a completion handler, or the Swift Concurrency overload `loadAd(with:)`.

You can extend the ad request using `AdRequest` by passing user interests, page context, location, or other data. Additional contextual data in the request can significantly improve your ad quality. Read more in the [Ad targeting](https://ads.yandex.com/helpcenter/en/dev/ios/target.md) section.

The following example shows how to load a rewarded ad from a 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 {
              // Load error
          }
      }
  }
  ```

- 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:
                  // Load error
                  break
              }
          }
      }
  }
  ```

{% endlist %}

## Ad rendering {#ad-view}

<!-- source: en/dev/_includes/rewarded.md -->
Rewarded ads are an incentivized ad format that allows users to earn rewards by viewing ads. These rewards may include extra lives or the ability to advance to the next level in a game. The reward format is determined by the app itself.
<!-- endsource: en/dev/_includes/rewarded.md -->

After you successfully load a rewarded ad, keep a reference to it and show it.

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

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

## Reward issuance {reward-send}

Counted impressions trigger the `rewardedAd(_ rewardedAd: RewardedAd, didReward reward: Reward)` method of the `RewardedAdDelegate` delegate. Use this method to reward the app user.

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

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

## Testing the rewarded ad integration {#test}

### Using demo ad units for ad testing

<!-- source: en/dev/_includes/test-ios-rewarded.md -->
We recommend using test ads to test your ad integration and your app itself.

To guarantee that test ads are returned for every ad request, we created a special demo ad placement ID. Use it to check your ad integration.

Demo adUnitId: `demo-rewarded-yandex`.

{% note warning %}

Before publishing your app to the store, make sure you replace the demo ad unit ID with a real one obtained from the Yandex Advertising Network interface.

{% endnote %}

You can find the list of available demo ad placement IDs in the [Demo ad units for testing](https://ads.yandex.com/helpcenter/en/dev/ios/demo-blocks.md) section.
<!-- endsource: en/dev/_includes/test-ios-rewarded.md -->

### Testing ad integration

<!-- source: en/dev/_includes/test-integration-ios.md -->
You can test your ad integration using the native Console tool.

To view detailed logs, call the `YandexAds` class's `enableLogging` method.

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

To view SDK logs, go to the Console tool and set `Subsystem = com.mobile.ads.ads.sdk`. You can also filter logs by category and error level.

If you're having problems integrating ads, you'll get a detailed report on the issues and recommendations for how to fix them.

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

## Additional resources {#resources}

* <!-- source: en/dev/_includes/github-pubdev-links.md -->
  Link to [GitHub](https://github.com/yandexmobile/yandex-ads-sdk-ios/blob/master/Examples/YandexMobileAdsExample/YandexMobileAdsExample/Yandex/Rewarded/RewardedAdViewController.swift).
  <!-- endsource: en/dev/_includes/github-pubdev-links.md -->
