Реклама при открытии приложения (App Open Ad)
Реклама при открытии приложения — специальный формат рекламы для монетизации экранов загрузки приложений. Такие объявления могут быть закрыты в любое время и предназначены для показа:
- при запуске приложения;
- при выведении приложения на передний план (foreground);
- при возврате в приложение из фонового режима (background).
Это руководство покажет, как интегрировать рекламу при открытии в приложение на Compose Multiplatform. В дополнение к примерам кода и инструкции оно содержит рекомендации по использованию данного формата рекламы, а также ссылки на дополнительные ресурсы.
Внимание
Реклама при открытии возможна только для приложений с вертикальной ориентацией. Для приложений с горизонтальной ориентацией объявления подбираться не будут.
Внешний вид
В объявлениях при открытии приложения отображается кнопка Перейти в приложение, чтобы пользователи знали, что они находятся в вашем приложении и могли закрыть рекламу. Вот пример того, как выглядит объявление:
Пререквизит
- Выполните шаги по интеграции Yandex Mobile Ads Compose Multiplatform Plugin, описанные в Быстром старте.
- Убедитесь, что используете самую актуальную версию Yandex Mobile Ads Compose Multiplatform Plugin, а в случае использовании медиации — наиболее свежую версию единой сборки.
Термины
- Холодный старт — старт приложения при отсутствии его в оперативной памяти, создание новой сессии приложения.
- Горячий старт — перевод приложения из фонового режима (background), когда приложение приостановлено в оперативной памяти, в активный режим (foreground).
Имплементация
- Создайте загрузчик рекламы с помощью
rememberAppOpenAdLoader(). - Загрузить рекламу через suspend-функцию
loadAd(). - При необходимости установите
InterstitialAdEventListenerна загруженное объявление перед вызовомshow(). - Покажите рекламу используя метод
show().
Основные шаги
-
Создайте загрузчик
AppOpenAdLoader@Composable fun AppOpenRoot() { val loader = rememberAppOpenAdLoader() // ... } -
Настройте запрос объявления.
val adUnitId = "demo-appopenad-yandex" // Замените на "R-M-XXXXXX-Y" val request = AdRequest(adUnitId = adUnitId)adUnitId— уникальный идентификатор, который выдаётся в интерфейсе Рекламной сети Яндекса и имеет вид R-M-XXXXXX-Y.Совет
Для тестирования можно использовать демоблок
"demo-appopenad-yandex". Перед публикацией замените его на идентификатор настоящего рекламного места.Параметры запроса расширяйте через
AdRequest(targeting,parameters,preferredThemeи другие поля). Дополнительный контекст в запросе заметно улучшает качество рекламы. Подробнее — в разделе Таргетирование рекламы. -
Загрузите объявление в корутине, привязанной к области UI.
val scope = rememberCoroutineScope() var appOpenAd by remember { mutableStateOf<AppOpenAd?>(null) } var isLoading by remember { mutableStateOf(false) } fun loadAppOpen() { isLoading = true scope.launch { try { val ad = loader.loadAd(request) appOpenAd = ad isLoading = false } catch (e: Exception) { isLoading = false // Ad failed to load with error // Attempting to load a new ad from the OnAdFailedToLoad event is strongly discouraged. } } } -
Решите, когда показывать рекламу. В Compose Multiplatform обычно используют сигналы жизненного цикла платформы (например, Android
ProcessLifecycleOwner, iOSscenePhaseили expect/actual-обёртку) и вызывают оркестрациюloadAppOpen()/show(), когда приложение выходит на передний план. Подключайте это туда, где вы уже разделяете холодный и горячий старт. -
Зарегистрируйте слушатель пользовательских событий.
val ad = appOpenAd ?: return ad.setAdEventListener( object : AppOpenAdEventListener { override fun onAdShown() { // Called when an ad is shown. } override fun onAdFailedToShow(adError: AdError) { // Called when an ad failed to show. appOpenAd = null // Preload the next ad if appropriate. } override fun onAdDismissed() { // Called when an ad is dismissed. appOpenAd = null // Preload the next ad if appropriate. } override fun onAdClicked() { // Called when a click is recorded for an ad. } override fun onAdImpression(impressionData: ImpressionData?) { // Called when an impression is recorded for an ad. } }, ) ad.show() -
После
show()держите экземплярAppOpenAdтолько пока он на экране. Когда сработают коллбэки закрытия, сбросьте ссылку перед загрузкой следующего креатива. -
Если загруженное объявление больше не нужно, обнулите nullable-ссылку, чтобы объект мог быть собран сборщиком мусора.
appOpenAd = null
Полный пример кода
В публичном примере приложения загрузка и показ вынесены на отдельный экран. Ниже — тот же паттерн в одном композабле для ориентира:
@Composable
fun AppOpenSample(adUnitId: String) {
val loader = rememberAppOpenAdLoader()
val scope = rememberCoroutineScope()
var appOpenAd by remember { mutableStateOf<AppOpenAd?>(null) }
var isLoading by remember { mutableStateOf(false) }
Column {
Button(
onClick = {
isLoading = true
scope.launch {
try {
appOpenAd = loader.loadAd(AdRequest(adUnitId = adUnitId))
} catch (e: Exception) {
// Ad failed to load with AdRequestError.
// Attempting to load a new ad from the onAdFailedToLoad() method is strongly discouraged.
}
isLoading = false
}
},
enabled = !isLoading,
) {
Text(if (isLoading) "Загрузка..." else "Загрузить App Open")
}
Button(
onClick = { appOpenAd?.show(); appOpenAd = null },
enabled = appOpenAd != null,
) {
Text("Показать App Open")
}
}
}
В продакшене подключайте вызовы загрузки и показа к реальным точкам жизненного цикла вместо кнопок.
Особенности подключения рекламы при открытии приложения
- Загрузка может занимать продолжительное время, поэтому не стоит увеличивать время холодного старта, если реклама не загрузилась.
- Заранее предзагружайте объявление для последующего показа при горячем старте.
- Не рекомендуется одновременно загружать рекламу App Open Ad и другие форматы при старте приложения: в этот момент приложение может скачивать служебные данные, что вместе с рекламой перегружает устройство и сеть и удлиняет загрузку.
- Если при загрузке получена ошибка, не инициируйте немедленно новый запрос. Если без повтора не обойтись, ограничьте число попыток — так вы избежите постоянных неудачных запросов при ограничениях.
Тестирование интеграции рекламы при открытии
Использование демоблоков для тестирования рекламы
Для проверки корректной интеграции рекламы и тестирования приложения используйте тестовую рекламу. Для гарантированного возврата тестовых объявлений на каждый запрос за рекламой вы можете использовать специальный демонстрационный идентификатор рекламного места.
Демонстрационный adUnitId: demo-appopenad-yandex.
Важно
Убедитесь, что перед выкладыванием приложения в магазин вы заменили демонстрационный идентификатор рекламного места на настоящий, полученный в интерфейсе Рекламной сети Яндекса.
Список всех доступных демонстрационных идентификаторов рекламного места доступен в разделе Демоблоки для тестирования.
Проверка корректной интеграции рекламы
Проверить корректность интеграции рекламы при открытии можно через встроенный в SDK анализатор. Подробный отчет о проверке выведется в лог.
Для просмотра отчета, выполните поиск по ключевому слову YandexAds в инструменте отладки Android-приложений Logcat.
adb logcat -v brief '*:S YandexAds'
В случае успешной интеграции вы увидите следующее сообщение:
adb logcat -v brief '*:S YandexAds'
mobileads$ adb logcat -v brief '*:S YandexAds'
I/YandexAds(13719): [Integration] Ad type App Open Ad was integrated successfully
В случае обнаружения проблем при интеграции рекламы вы получите подробный отчет о проблемах и рекомендации по их устранению.
Использование демоблоков для тестирования рекламы
Для проверки корректной интеграции рекламы при открытии приложения и тестирования приложения используйте тестовую рекламу. Для гарантированного возврата тестовых объявлений на каждый запрос за рекламой вы можете использовать специальный демонстрационный идентификатор рекламного места.
Демонстрационный adUnitId: demo-appopenad-yandex.
Важно
Убедитесь, что перед выкладыванием приложения в магазин вы заменили демонстрационный идентификатор рекламного места на настоящий, полученный в интерфейсе Рекламной сети Яндекса.
Список всех доступных демонстрационных идентификаторов рекламного места доступен в разделе Демоблоки для тестирования.
Проверка корректной интеграции рекламы
Проверить корректность интеграции рекламы можно через нативный инструмент Console.
Чтобы получить возможность просматривать расширенные логи, необходимо вызвать метод enableLogging класса YandexAds.
YandexAds.enableLogging()
Для просмотра логов SDK в инструменте Console установите Subsystem = com.mobile.ads.ads.sdk. Вы можете фильтровать логи по категории и уровню ошибки.
В случае обнаружения проблем при интеграции рекламы вы увидите подробный отчет о проблемах и рекомендации по их устранению.
Рекомендации
-
При открытии приложения не показывайте объявление до экрана загрузки (Splash screen). Экран загрузки делает использование приложения удобнее. Пользователь будет уверен, что открыл нужное приложение.
На этом же экране вы можете предупредить о грядущей рекламе. Используйте индикатор загрузки или текстовое сообщение, которое проинформирует пользователя о том, что просмотр содержимого приложения продолжится после рекламы.
-
Учитывайте задержку между запросом и показом рекламы.
Если есть задержка между запросом рекламы и ее показом, пользователь может увидеть рекламу, которая не имеет отношения к контенту. Один из вариантов решения — использовать экран загрузки до отображения основного содержимого приложения и начать показ рекламы именно с этого экрана. Если после экрана загрузки приложение открывает какой-то контент, то рекламу лучше не показывать.
-
Не показывайте объявление сразу после установки приложения. Подождите, пока новые пользователи откроют приложение и воспользуются им несколько раз.
Показывайте объявление только тем пользователям, которые достигли определенных критериев в приложении. Например, прошли определенный уровень, открывали приложение определенное количество раз, не участвуют в предложениях с вознаграждением.
-
Не показывайте рекламу на каждый холодный/горячий старт приложения. Регулируйте частоту показов, основываясь на поведении пользователя приложения.
-
Показывайте рекламу только в том случае, если приложение находится в фоновом режиме в течение определенного промежутка времени (например, 30 секунд, 2 минуты, 15 минут).
-
Проведите тестирование. Каждое приложение требует индивидуального подхода для максимизации дохода. Поведение пользователей и их вовлеченность могут меняться, поэтому рекомендуется периодически тестировать стратегии показа рекламы в приложении.
Дополнительные ресурсы
Полные примеры интеграции:
-
Link to GitHub.