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

# Межстраничная реклама (SwiftUI)

<!-- source: ru/dev/_includes/interstitial.md -->
Межстраничная реклама (interstitial) — полноэкранный формат рекламы, встраиваемый в контент приложения во время естественных пауз, таких как переход между уровнями игры или окончание выполнения целевого действия.
<!-- endsource: ru/dev/_includes/interstitial.md -->

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

В межстраничной рекламе внимание пользователя полностью сконцентрировано на рекламе, за счет чего стоимость ее показа выше.

{% cut "Внешний вид" %}

<img src="https://yastatic.net/s3/doc-binary/src/docs/support/mobile-ads/ru/monetization/_images/interstitial-ru-ex.png" width="200">

{% endcut %}

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

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

Основные шаги по интеграции межстраничных объявлений в SwiftUI:

1. Добавить на корневой (или нужный) `View` модификатор `.interstitialAd(isPresented:request:onEvent:)`.
1. Управлять загрузкой через `Binding<AdRequest?>`. Ненулевое значение запускает загрузку.
1. Управлять показом через `Binding<Bool>`. Значение `true` показывает уже загруженное объявление (если загрузка еще идет, показ будет отложен до готовности).
1. Передать [дополнительные настройки](https://ads.yandex.com/helpcenter/ru/dev/ios/target-adfox.md), если вы работаете через систему Adfox (через параметры `AdRequest`).
1. Обрабатывать жизненный цикл в замыкании `onEvent` (`InterstitialAdEvent`).

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

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

2. Чтобы не потерять состояние загрузки, держите модификатор на `View`, который работает на протяжении сценария показа (например, на экране или корне навигации).

## Загрузка и показ рекламы

Для межстраничной рекламы в SwiftUI используйте `AdRequest` с идентификатором рекламного места и два состояния: 

* опциональный запрос;
* флаг показа.

Для уведомления об успешной или неудачной загрузке, показе, закрытии и ошибках используйте замыкание `onEvent` с перечислением `InterstitialAdEvent`.

```swift
import SwiftUI
import YandexMobileAds

struct InterstitialView: View {
    @State private var adRequest: AdRequest?
    @State private var isPresented = false

    var body: some View {
        VStack {
            Button("Загрузить и показать") {
                adRequest = AdRequest(adUnitID: "R-M-XXXXX-YY")
            }
        }
        .interstitialAd(isPresented: $isPresented, request: $adRequest) { event in
            switch event {
            case .didLoad:
                isPresented = true
            case .didDismiss, .didFailToShow, .didFailToLoad:
                adRequest = nil
            default:
                break
            }
        }
    }
}
```

Идентификатор рекламного места (adUnitId) получается в интерфейсе Рекламной сети Яндекса.

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

### Пример

Отдельно инициировать загрузку и показать объявление после готовности:

```swift
struct InterstitialView: View {
    @State private var adRequest: AdRequest?
    @State private var isPresented = false

    func loadAd() {
        adRequest = AdRequest(adUnitID: "R-M-XXXXX-YY")
    }

    func showAd() {
        isPresented = true
    }

    var body: some View {
        VStack {
            Button("Загрузить", action: loadAd)
            Button("Показать", action: showAd)
        }
        .interstitialAd(isPresented: $isPresented, request: $adRequest) { event in
            if case .didLoad = event {
                // Можно вызвать showAd() или установить isPresented = true
            }
        }
    }
}
```

Если установить `isPresented = true` до завершения загрузки, показ выполнится автоматически после успешной загрузки.

## Показ объявления

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

После успешной загрузки приходит событие `.didLoad`. Установите `isPresented = true`, чтобы показать объявление (или заранее установите флаг показа).

Флаг `isPresented` сбрасывается в `false` после закрытия объявления, ошибки показа или ошибки загрузки.

## Тестирование интеграции межстраничной рекламы

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

<!-- source: ru/dev/_includes/test-ios-interstitial.md -->
Для проверки корректной интеграции рекламы и тестирования приложения используйте тестовую рекламу. Для гарантированного возврата тестовых объявлений на каждый запрос за рекламой вы можете использовать специальный демонстрационный идентификатор рекламного места.

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

{% note warning %}

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

{% endnote %}

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