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

# Реклама при открытии приложения (App Open Ad)

<!-- source: ru/dev/_includes/app-open-ad.md -->
Реклама при открытии приложения — специальный формат рекламы для монетизации экранов загрузки приложений. Такие объявления могут быть закрыты в любое время и предназначены для показа:
* при запуске приложения;
* при выведении приложения на передний план (foreground);
* при возврате в приложение из фонового режима (background).
<!-- endsource: ru/dev/_includes/app-open-ad.md -->

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


## Внешний вид

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

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


## Пререквизит {#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 -->

### Термины

* **Холодный старт** — старт приложения, при отсутствии его в оперативной памяти, создание новой сессии приложения.
* **Горячий старт** — перевод приложения из фонового режима (background), когда приложение приостановлено в оперативной памяти, в активный режим (foreground).

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

1. Инициализируйте SDK на старте работы приложения.
2. Создайте и сконфигурируйте объект загрузки рекламы `AppOpenAdLoader`.
3. Загрузите рекламное объявление.
4. Используйте метод класса AppDelegate `applicationDidBecomeActive(_ application: UIApplication)` для показа рекламы во время его открытия.
5. Перед показом объявления установите делегат методов обратного вызова рекламного объявления `AppOpenAdDelegate`.
6. Покажите рекламу используя метод `show`.

### Основные шаги

1. Инициализируйте SDK на старте работы приложения.

   ```swift
   // wait for sdk initialization before loading ads
   YandexAds.initializeSDK(completionHandler: completionHandler)
   ```
2. Создайте и сконфигурируйте объект загрузки рекламы `AppOpenAdLoader`.

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

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

   ```swift
    private lazy var appOpenAdLoader: AppOpenAdLoader = {
        let loader = AppOpenAdLoader()
        return loader
    }()
   ```
3. Загрузите рекламное объявление.

   {% list tabs %}

   - Swift Concurrency

     ```swift
     func loadAd() async {
         // Replace demo-appopenad-yandex with actual Ad Unit ID
         let request = AdRequest(adUnitID: "demo-appopenad-yandex")
         do {
             let ad = try await appOpenAdLoader.loadAd(with: request)
             appOpenAd = ad
             appOpenAd?.delegate = self
         } catch {
             // Ad failed to load. Attempting to load a new ad from here is strongly discouraged.
         }
     }
     ```

   - Completion handler

     ```swift
     func loadAd() {
         // Replace demo-appopenad-yandex with actual Ad Unit ID
         let request = AdRequest(adUnitID: "demo-appopenad-yandex")
         self.appOpenAdLoader.loadAd(with: request) { [weak self] result in
             switch result {
             case .success(let ad):
                 self?.appOpenAd = ad
                 self?.appOpenAd?.delegate = self
             case .failure:
                 // Ad failed to load. Attempting to load a new ad from here is strongly discouraged.
                 break
             }
         }
     }
     ```

   {% endlist %}
4. Используйте метод класса AppDelegate для показа рекламы во время его открытия.
   ```swift
   func applicationDidBecomeActive(_ application: UIApplication)
   ```
5. Перед показом объявления установите делегат методов обратного вызова рекламного объявления `AppOpenAdDelegate`.
   ```swift
    extension AppOpenAdController: AppOpenAdDelegate {
        func appOpenAd(_ appOpenAd: AppOpenAd, didFailToShow error: Error) {
            // Called when an ad failed to show.

            // Load next ad after fail to show with error
            loadAd()
        }

        func appOpenAdDidShow(_ appOpenAd: AppOpenAd) {
            // Called when ad did shown.
        }

        func appOpenAdDidDismiss(_ appOpenAd: AppOpenAd) {
            // Called when ad is dismissed.

            // Load next ad after dismiss
            loadAd()
        }

        func appOpenAdDidClick(_ appOpenAd: AppOpenAd) {
            // Called when a click is recorded for an ad.
        }

        func appOpenAd(_ appOpenAd: AppOpenAd, didTrackImpression impressionData: ImpressionData?) {
            // Called when an impression is recorded for an ad.
        }
    }
   ```

6. Покажите рекламу используя метод `show`.

   ```swift
   self.appOpenAd?.show(from: self)
   ```

   <!-- source: ru/dev/_includes/app-open-ad.md -->
   {% note info %}
       
   Если реклама уже показана, после вызова метода `show(from:)` в `AppOpenAdDelegate.appOpenAd(_:didFailToShowError:)` вернется ошибка показа.
       
   {% endnote %}
   <!-- endsource: ru/dev/_includes/app-open-ad.md -->

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

1. Все вызовы методов Yandex Mobile Ads SDK необходимо выполнять из главного потока.
2. Загрузка может занимать продолжительное время, поэтому не стоит увеличивать время холодного старта, если реклама не загрузилась.
3. Заранее предзагружайте объявление для последующего показа при горячем старте.
4. Не рекомендуется одновременно загружать рекламу App Open Ad и другие форматы рекламы при старте приложения, так как приложение в этот момент может скачивать необходимые для работы данные. Это может перегрузить устройство и интернет-соединение, делая загрузку рекламы дольше.
5. Если при загрузке произошла ошибка (case `.failure` в completion handler или блок `catch` в Swift Concurrency), не пытайтесь загрузить новое объявление снова. Если все же необходимо это сделать, ограничьте число повторных попыток загрузки рекламы. Это поможет избежать постоянных неудачных запросов и проблем с подключением в случае ограничений.

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

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

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

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

{% note warning %}

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

{% endnote %}

Список всех доступных демонстрационных идентификаторов рекламного места доступен в разделе [Демоблоки для тестирования](https://ads.yandex.com/helpcenter/ru/dev/ios/demo-blocks.md).
<!-- endsource: ru/dev/_includes/test-ios-app-open-ad.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 -->

## Рекомендации

1. Не стоит показывать объявление при открытии приложения до экрана загрузки (Splash screen).

   Показывая экран загрузки, вы делаете использование приложения более приятным и простым для пользователя. Этот шаг не даст пользователю удивиться или запутаться, потому что он будет точно знать, что открыл нужное приложение. На этом же экране вы можете предупредить пользователей о грядущей рекламе. Для этого можно использовать индикатор загрузки или просто текстовое сообщение, которое скажет пользователю, что просмотр содержимого приложения продолжится после рекламы.

2. Если есть задержка между запросом рекламы и ее показом, пользователь может ненадолго открыть ваше приложение, а потом неожиданно увидеть рекламу, которая не имеет отношения к контенту. Это может негативно повлиять на впечатление пользователя, поэтому стоит избегать таких ситуаций. Один из вариантов решения - использовать экран загрузки до отображения основного содержимого приложения и начать показ рекламы именно с этого экрана. Если после экрана загрузки приложение открывает какой-то контент, то лучше уже не показывать рекламу.

3. Подождите, пока новые пользователи откроют приложение и воспользуются им несколько раз, прежде чем показывать рекламу при открытии. Показывайте объявление только тем пользователям, которые достигли определенных критериев в приложении (например, прошли определенный уровень, открывали приложение определенное количество раз, не участвуют в предложениях с вознаграждением и т.д.). Не стоит показывать объявление сразу же после установки приложения.

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

5. Показывайте рекламу только в том случае, если приложение находится в фоновом режиме в течение определенного промежутка времени (например, 30 секунд, 2 минуты, 15 минут).

6. Важно, чтобы вы провели тестирование, поскольку каждое приложение уникально и требует собственного подхода для максимизации дохода, не снижая retention или время, проведенное в приложении. Поведение пользователей и их вовлеченность со временем могут меняться, поэтому рекомендуется периодически тестировать стратегии показа рекламы при открытии в вашем приложении.

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

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