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

Межстраничная реклама (interstitial) — полноэкранный формат рекламы, встраиваемый в контент приложения во время естественных пауз, таких как переход между уровнями игры или окончание выполнения целевого действия.

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

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

Внешний вид

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

Пререквизит

  1. Выполните шаги по интеграции SDK, описанные в Быстром старте.
  2. Заранее проинициализируйте рекламный SDK.
  3. Убедитесь, что используете последнюю версию Yandex Mobile Ads SDK, а в случае использования медиации — актуальную версию единой сборки.

Имплементация

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

  1. Добавить на корневой (или нужный) View модификатор .interstitialAd(isPresented:request:onEvent:).
  2. Управлять загрузкой через Binding<AdRequest?>. Ненулевое значение запускает загрузку.
  3. Управлять показом через Binding<Bool>. Значение true показывает уже загруженное объявление (если загрузка еще идет, показ будет отложен до готовности).
  4. Передать дополнительные настройки, если вы работаете через систему Adfox (через параметры AdRequest).
  5. Обрабатывать жизненный цикл в замыкании onEvent (InterstitialAdEvent).

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

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

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

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

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

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

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

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. Для этого передайте в инициализаторе данные об интересах пользователя, контекстные данные страницы, локацию или другие дополнительные данные. Контекстные данные могут значительно улучшить качество рекламы. Подробнее читайте в разделе Таргетирование рекламы.

Пример

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

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 после закрытия объявления, ошибки показа или ошибки загрузки.

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

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

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

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

Важно

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

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

Проверка корректной интеграции рекламы

Проверить корректность интеграции рекламы можно через нативный инструмент Console.

Чтобы получить возможность просматривать расширенные логи, необходимо вызвать метод enableLogging класса YandexAds.

YandexAds.enableLogging()

Для просмотра логов SDK в инструменте Console установите Subsystem = com.mobile.ads.ads.sdk. Вы можете фильтровать логи по категории и уровню ошибки.

В случае обнаружения проблем при интеграции рекламы вы увидите подробный отчет о проблемах и рекомендации по их устранению.

Дополнительные ресурсы