Реклама при открытии приложения (App Open Ad)
Реклама при открытии приложения — специальный формат рекламы для монетизации экранов загрузки приложений. Такие объявления могут быть закрыты в любое время и предназначены для показа:
- при запуске приложения;
- при выведении приложения на передний план (foreground);
- при возврате в приложение из фонового режима (background).
Это руководство покажет, как интегрировать рекламу при открытии в Android‐приложение. В дополнение к примерам кода и инструкции оно содержит рекомендации по использованию данного формата рекламы, а также ссылки на дополнительные ресурсы.
Внимание
Реклама при открытии возможна только для приложений с вертикальной ориентацией. Для приложений с горизонтальной ориентацией объявления подбираться не будут.
Дополнительно об интеграции рекламы при открытии приложения смотрите в видео:
Внешний вид
В объявлениях при открытии приложения отображается кнопка Перейти в приложение, чтобы пользователи знали, что они находятся в вашем приложении и могли закрыть рекламу. Вот пример того, как выглядит объявление:
Пререквизит
- Выполните шаги по интеграции SDK, описанные в Быстром старте.
- Заранее проинициализируйте рекламный SDK.
- Убедитесь, что используете последнюю версию Yandex Mobile Ads SDK, а в случае использования медиации — наиболее свежую версию единой сборки.
Термины
- Холодный старт — старт приложения, при отсутствии его в оперативной памяти, создание новой сессии приложения.
- Горячий старт — перевод приложения из фонового режима (background), когда приложение приостановлено в оперативной памяти, в активный режим (foreground).
Имплементация
- Инициализируйте SDK на старте работы приложения.
- Создайте и сконфигурируйте объект загрузки рекламы
AppOpenAdLoader. - Установите слушатель методов обратного вызова
AppOpenAdLoadListenerдля уведомления об успешной или неудачной загрузке рекламы. - Загрузите рекламное объявление используя метод
loadAd(AdRequestConfiguration). - Используйте LifecycleEventObserver для обработки изменения состояния приложения и показа рекламы во время его открытия.
- Перед показом объявления установите слушатель методов обратного вызова рекламного объявления
AppOpenAdEventListener. - Покажите рекламу используя метод
show(Activity). - Освободите ресурсы.
Основные шаги
-
Инициализируйте SDK на старте работы приложения.
KotlinJavaMobileAds.initialize(this) { // Now you can use ads }MobileAds.initialize(this, () -> { // Now you can use ads }); -
Создайте и сконфигурируйте объект загрузки рекламы
AppOpenAdLoader.Потребуется идентификатор рекламного места, полученный вами в интерфейсе Рекламной сети Яндекса (
AD_UNIT_ID).Расширить параметры запроса за рекламой можно через
AdRequestConfiguration.Builder(), передав в запросе данные об интересах пользователя, контекстные данные страницы, локацию или другие дополнительные данные. Дополнительные контекстные данные на запросе могут значительно улучшить качество рекламы. Подробнее читайте в разделе Таргетирование рекламы.KotlinJavaval appOpenAdLoader: AppOpenAdLoader = AppOpenAdLoader(application) val AD_UNIT_ID = "R-M-XXXXXX-Y" // для отладки можно использовать "demo-appopenad-yandex" val adRequestConfiguration = AdRequestConfiguration.Builder(AD_UNIT_ID).build()final AppOpenAdLoader appOpenAdLoader = AppOpenAdLoader(application); final String AD_UNIT_ID = "R-M-XXXXXX-Y"; // для отладки можно использовать "demo-appopenad-yandex" final AdRequestConfiguration adRequestConfiguration = new AdRequestConfiguration.Builder(AD_UNIT_ID).build(); -
Установите слушатель методов обратного вызова
AppOpenAdLoadListenerдля уведомления об успешной или неудачной загрузке рекламы.KotlinJavaval appOpenAdLoadListener = object : AppOpenAdLoadListener { override fun onAdLoaded(appOpenAd: AppOpenAd) { // The ad was loaded successfully. Now you can show loaded ad. this@Activity.appOpenAd = appOpenAd } override fun onAdFailedToLoad(adRequestError: AdRequestError) { // Ad failed to load with AdRequestError. // Attempting to load a new ad from the onAdFailedToLoad() method is strongly discouraged. } } appOpenAdLoader.setAdLoadListener(appOpenAdLoadListener)AppOpenAdLoadListener appOpenAdLoadListener = new AppOpenAdLoadListener() { @Override public void onAdLoaded(@NonNull final AppOpenAd appOpenAd) { // The ad was loaded successfully. Now you can show loaded ad. mAppOpenAd = appOpenAd; } @Override public void onAdFailedToLoad(@NonNull final AdRequestError adRequestError) { // Ad failed to load with AdRequestError. // Attempting to load a new ad from the onAdFailedToLoad() method is strongly discouraged. } }; appOpenAdLoader.setAdLoadListener(appOpenAdLoadListener); -
Загрузите рекламное объявление используя метод
loadAd(AdRequestConfiguration).KotlinJavaprivate fun loadAppOpenAd() { appOpenAdLoader.loadAd(adRequestConfiguration) }private void loadAppOpenAd() { appOpenAdLoader.loadAd(adRequestConfiguration); } -
Используйте
LifecycleEventObserverдля обработки изменения состояния приложения и показа рекламы во время его открытия.KotlinJavaval processLifecycleObserver = DefaultProcessLifecycleObserver( onProcessCameForeground = ::showAppOpenAd ) ProcessLifecycleOwner.get().lifecycle.addObserver(processLifecycleObserver)final DefaultProcessLifecycleObserver processLifecycleObserver = new DefaultProcessLifecycleObserver() { @Override public void onProcessCameForeground() { showAppOpenAd(); } } ProcessLifecycleOwner.get().getLifecycle().addObserver(processLifecycleObserver); -
Перед показом объявления установите слушатель методов обратного вызова рекламного объявления
AppOpenAdEventListener.KotlinJavaprivate inner class AdEventListener : AppOpenAdEventListener { override fun onAdShown() { // Called when ad is shown. } override fun onAdFailedToShow(adError: AdError) { // Called when ad failed to show. } override fun onAdDismissed() { // Called when ad is dismissed. // Clean resources after dismiss and preload new ad. clearAppOpenAd() loadAppOpenAd() } 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. // Get Impression Level Revenue Data in argument. } } private val appOpenAdEventListener = AdEventListener() appOpenAd?.setAdEventListener(appOpenAdEventListener)AppOpenAdEventListener appOpenAdEventListener = new AppOpenAdEventListener() { @Override public void onAdShown() { // Called when ad is shown. } @Override public void onAdFailedToShow(@NonNull final AdError adError) { // Called when ad failed to show. } @Override public void onAdDismissed() { // Called when ad is dismissed. // Clean resources after dismiss and preload new ad. clearAppOpenAd(); loadAppOpenAd(); } @Override public void onAdClicked() { // Called when a click is recorded for an ad. } @Override public void onAdImpression(@Nullable final ImpressionData impressionData) { // Called when an impression is recorded for an ad. } }; if (mAppOpenAd != null) { mAppOpenAd.setAdEventListener(appOpenAdEventListener); } -
Покажите рекламу используя метод
show.KotlinJavaprivate fun showAppOpenAd() { appOpenAd?.show(activity) }private void showAppOpenAd() { if (mAppOpenAd != null) { mAppOpenAd.show(activity); } }Примечание
Если реклама уже показана, после вызова метода
show(Activity)вAppOpenAdEventListener.onAdFailedToShow(AdError)вернется ошибка показа. -
Освободите ресурсы.
Это необходимо для предотвращения утечек памяти.
KotlinJavaprivate fun clearAppOpenAd() { appOpenAd?.setAdEventListener(null) appOpenAd = null }private void clearAppOpenAd() { if (mAppOpenAd != null) { mAppOpenAd.setAdEventListener(null); mAppOpenAd = null; } }
Особенности подключения рекламы при открытии приложения
- Все вызовы методов Yandex Mobile Ads SDK необходимо выполнять из главного потока.
- Загрузка может занимать продолжительное время, поэтому не стоит увеличивать время холодного старта, если реклама не загрузилась.
- Заранее предзагружайте объявление для последующего показа при горячем старте.
- Не рекомендуется одновременно загружать рекламу App Open Ad и другие форматы рекламы при старте приложения, так как приложение в этот момент может скачивать необходимые для работы данные. Это может перегрузить устройство и интернет-соединение, делая загрузку рекламы дольше.
- Если вы получили ошибку в коллбэке
onAdFailedToLoad(), не пытайтесь загрузить новое объявление снова. Если все же необходимо это сделать, ограничьте число повторных попыток загрузки рекламы. Это поможет избежать постоянных неудачных запросов и проблем с подключением в случае ограничений.
Тестирование интеграции рекламы при открытии
Использование демоблоков для тестирования рекламы
Для проверки корректной интеграции рекламы и тестирования приложения используйте тестовую рекламу. Для гарантированного возврата тестовых объявлений на каждый запрос за рекламой вы можете использовать специальный демонстрационный идентификатор рекламного места.
Демонстрационный 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
В случае обнаружения проблем при интеграции рекламы вы получите подробный отчет о проблемах и рекомендации по их устранению.
Рекомендации
-
Не стоит показывать объявление при открытии приложения до экрана загрузки (Splash screen).
Показывая экран загрузки, вы делаете использование приложения более приятным и простым для пользователя. Этот шаг не даст пользователю удивиться или запутаться, потому что он будет точно знать, что открыл нужное приложение. На этом же экране вы можете предупредить пользователей о грядущей рекламе. Для этого можно использовать индикатор загрузки или просто текстовое сообщение, которое скажет пользователю, что просмотр содержимого приложения продолжится после рекламы.
-
Если есть задержка между запросом рекламы и ее показом, пользователь может ненадолго открыть ваше приложение, а потом неожиданно увидеть рекламу, которая не имеет отношения к контенту. Это может негативно повлиять на впечатление пользователя, поэтому стоит избегать таких ситуаций. Один из вариантов решения - использовать экран загрузки до отображения основного содержимого приложения и начать показ рекламы именно с этого экрана. Если после экрана загрузки приложение открывает какой-то контент, то лучше уже не показывать рекламу.
-
Подождите, пока новые пользователи откроют приложение и воспользуются им несколько раз, прежде чем показывать рекламу при открытии. Показывайте объявление только тем пользователям, которые достигли определенных критериев в приложении (например, прошли определенный уровень, открывали приложение определенное количество раз, не участвуют в предложениях с вознаграждением и т.д.). Не стоит показывать объявление сразу же после установки приложения.
-
Регулируйте частоту показов, основываясь на поведении пользователя приложения. Не стоит показывать рекламу на каждый холодный/горячий старт приложения.
-
Показывайте рекламу только в том случае, если приложение находится в фоновом режиме в течение определенного промежутка времени (например, 30 секунд, 2 минуты, 15 минут).
-
Важно, чтобы вы провели тестирование, поскольку каждое приложение уникально и требует собственного подхода для максимизации дохода, не снижая retention или время, проведенное в приложении. Поведение пользователей и их вовлеченность со временем могут меняться, поэтому рекомендуется периодически тестировать стратегии показа рекламы при открытии в вашем приложении.
Дополнительные ресурсы
-
Ссылка на github.