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

Реклама при открытии приложения — специальный формат рекламы для монетизации экранов загрузки приложений. Такие объявления могут быть закрыты в любое время и предназначены для показа:

  • при запуске приложения;
  • при выведении приложения на передний план (foreground);
  • при возврате в приложение из фонового режима (background).

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

Внешний вид

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

Пререквизит

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

Термины

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

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

  1. Инициализируйте SDK на старте работы приложения.
  2. На корневом View (например, внутри WindowGroup) добавьте модификатор .appOpenAd(request:onEvent:).
  3. Управляйте загрузкой через Binding<AdRequest?>. Ненулевое значение запускает загрузку.
  4. После успешной загрузки объявление показывается автоматически при переходе приложения в активное состояние (foreground), пока request не сброшен.
  5. Обрабатывайте события жизненного цикла в onEvent (AppOpenAdEvent).
  6. После закрытия объявления, ошибки показа или ошибки загрузки request сбрасывается в nil. Задайте новый AdRequest, когда нужна следующая загрузка (часто в обработчике смены фазы сцены).

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

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

    // дождитесь инициализации SDK перед загрузкой рекламы
    YandexAds.initializeSDK(completionHandler: completionHandler)
    
  2. Подключите модификатор к корневому представлению и храните состояние запроса.

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

    Расширить параметры запроса за рекламой можно через AdRequest. Для этого передайте в запросе данные об интересах пользователя, контекстные данные страницы, локацию или другие дополнительные данные. Контекстные данные могут значительно улучшить качество рекламы. Подробнее читайте в разделе Таргетирование рекламы.

    Пример для iOS 14+ с ScenePhase (перезагрузка после сброса request в nil):

    import SwiftUI
    import YandexMobileAds
    
    @main
    struct MyApp: App {
        @State private var adRequest: AdRequest?
        @Environment(\.scenePhase) private var scenePhase
    
        var body: some Scene {
            WindowGroup {
                ContentView()
                    .appOpenAd(request: $adRequest) { event in
                        if case .didFailToLoad = event {
                            // при необходимости — отложенный повтор, см. рекомендации ниже
                        }
                    }
            }
            .onChange(of: scenePhase) {
                if scenePhase == .active, adRequest == nil {
                    adRequest = AdRequest(adUnitID: "demo-appopenad-yandex")
                }
            }
        }
    }
    

    На iOS 13 вместо scenePhase используйте уведомление UIApplication.didBecomeActiveNotification или эквивалентную логику жизненного цикла, чтобы выставлять новый AdRequest после nil.

  3. События загрузки и показа приходят в onEvent:

    .appOpenAd(request: $adRequest) { event in
        switch event {
        case .didLoad:
            // Объявление готово; показ произойдёт при следующем foreground
            break
        case .didShow:
            break
        case .didDismiss:
            // request уже сброшен модификатором
            break
        case .didFailToShow:
            break
        case .didFailToLoad:
            // request сброшен; не рекомендуется немедленно перезагружать в цикле
            break
        case .didClick:
            break
        case .didTrackImpression(_):
            break
        }
    }
    

    Примечание

    Если реклама уже показана, после вызова метода show(from:) в AppOpenAdDelegate.appOpenAd(_:didFailToShowError:) вернется ошибка показа.

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

  1. Загрузка может занимать продолжительное время, поэтому не увеличивайте время холодного старта, если реклама не загрузилась.
  2. Заранее предзагружайте объявление для последующего показа при горячем старте. Пока в Binding передан nil, загрузка не выполняется. Задайте AdRequest, когда нужна фоновая подготовка объявления к показу.
  3. Не рекомендуется одновременно загружать рекламу App Open Ad и другие форматы рекламы при старте приложения, так как приложение в этот момент может скачивать данные для работы. Это может перегрузить устройство и увеличить время загрузки рекламы.
  4. Если вы получили ошибку в событии .didFailToLoad, не пытайтесь сразу загружать новое объявление. Если это необходимо сделать, ограничьте число повторных попыток загрузки рекламы, чтобы избежать неудачных запросов и проблем с подключением.

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

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

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

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

Важно

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

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

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

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

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

YandexAds.enableLogging()

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

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

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

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

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

  1. Учитывайте задержку между запросом и показом рекламы.

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

  1. Не показывайте объявление сразу после установки приложения. Подождите, пока новые пользователи откроют приложение и воспользуются им несколько раз.

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

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

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

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

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