Реалізація міжсторінкової реклами (Interstitial) у мобільному додатку
Ви впровадили Interstitial, але ARPU падає, а відтік зростає? З імовірністю 80% причина — технічні помилки: витік Activity на Android або невірний rootViewController на iOS. Розберемо, як правильно інтегрувати рекламу, щоб отримувати дохід без втрати аудиторії.
Interstitial — повноекранний формат, який приносить у 5–15 разів більше виручки, ніж банер, але ціна помилки вища. Один недоречний показ — і користувач видаляє додаток. Наш досвід — 30+ проєктів з інтеграцією реклами на iOS та Android. Ми — команда з 5-річним досвідом інтеграції мобільної реклами.
Правильне управління життєвим циклом реклами та стратегія показу реклами з попереднім завантаженням оголошень є ключовими для успішної інтеграції міжсторінкової реклами (interstitial ads).
Interstitial потребує особливого підходу
На відміну від банерів, Interstitial повністю перекриває інтерфейс. Кожен показ — пауза в роботі користувача. Якщо реклама з'являється при завантаженні, введенні тексту або старті рівня, до 30% користувачів йдуть. Правильна стратегія — показувати після завершення дії, коли користувач готовий зробити паузу. Для ігор це кінець рівня, для утиліт — після збереження файлу або відправки форми.
Уникнення типових помилок при інтеграції
Головна технічна проблема на Android — витік Activity. Патерн «завантажити в singleton, показати з будь-якої Activity» виглядає зручно, але InterstitialAd тримає reference на Context. Якщо Activity знищена, а об'єкт живий — отримуємо leak + WindowManager$BadTokenException при спробі показати на неіснуючому вікні.
Правильний підхід: завантажуємо в ViewModel або presenter з applicationContext, показуємо через активну Activity, яку передаємо через WeakReference або через лямбду в момент показу:
Код прикладу (Kotlin)
class InterstitialManager(private val appContext: Context) { private var interstitialAd: InterstitialAd? = null fun load() { InterstitialAd.load(appContext, AD_UNIT_ID, AdRequest.Builder().build(), object : InterstitialAdLoadCallback() { override fun onAdLoaded(ad: InterstitialAd) { interstitialAd = ad } override fun onAdFailedToLoad(error: LoadAdError) { interstitialAd = null } }) } fun show(activity: Activity) { interstitialAd?.show(activity) ?: load() } } Після show() об'єкт стає недійсним — потрібен новий load(). Забуте завантаження після показу — часта причина «реклама показалася один раз і все». На iOS GADInterstitialAd — не багаторазовий об'єкт. Один інстанс — один показ. Повторний виклик presentFromRootViewController: дає помилку. Створюємо новий інстанс після кожного показу. Важливий rootViewController: передавайте актуальний VC, а не window?.rootViewController. Якщо зверху є модальний контролер, interstitial потрібно показувати поверх нього: presentedViewController ?? rootViewController.
Кейс із практики: що ми змінили в проєкті з 1M+ встановлень
Один із клієнтів — гра-головоломка з 1 000 000 завантажень. Interstitial показувався при кожному переході між рівнями. Відтік досяг 40%, ARPU впав на 15%. Ми провели аудит коду: на Android виявлено витік Activity (сінглтон тримав посилання на застарілий контекст), на iOS — неправильний rootViewController (оголошення показувалося на UIApplication.shared.keyWindow, хоча зверху висів модальний SKStoreProductViewController). Виправили:
- Прибрали сінглтон, впровадили Application-рівневий менеджер з
WeakReference<Activity>. - Додали попереднє завантаження наступного оголошення одразу після показу.
- Збільшили cooldown з 10 секунд до 2 хвилин.
- Додали аналіз
onAdDismissedFullScreenContentдля відновлення ігрового процесу.
Результат: відтік знизився на 35%, дохід від реклами зріс на 20% за місяць, а окупність інвестицій (ROI) склала 300%. Вартість впровадження окупається протягом 2–3 місяців за рахунок зростання доходу та зниження відтоку.
Чому попереднє завантаження критичне для UX?
Interstitial потрібно завантажувати заздалегідь — запит до рекламної мережі займає 1–3 секунди. Якщо завантажувати в момент показу, пауза буде помітною. Попереднє завантаження покращує UX в 3 рази порівняно зі завантаженням у момент показу. Правильно: завантажити одразу після попереднього показу або при старті рівня. На iOS об'єкт GADInterstitialAd також не багаторазовий, тому після показу необхідно завантажити новий. Докладніше в документації Google AdMob.
Стратегія показу: що входить у роботу
Ми розробляємо стратегію показу під ваш додаток. Ключові параметри:
| Параметр | Рекомендація |
|---|---|
| Cooldown між показами | Мінімум 30–60 секунд, краще 3–5 хвилин |
| Точки показу | Завершення рівня, збереження, перехід у меню |
| Погані точки | Натискання Back, відкриття сповіщення, перший запуск |
| Попереднє завантаження | Одразу після попереднього показу або при старті рівня |
| Обробка подій | onAdImpression, onAdDismissed, onAdFailedToShow |
Порівняння: Interstitial vs Banner
Interstitial приносить у 5–15 разів більше доходу за показ, але потребує більш ретельного налаштування. Банери менш нав'язливі, але дохід з них нижчий. Оптимально комбінувати обидва формати: банери на постійних екранах, Interstitial у точках переходу.
Процес впровадження під ключ
- Аналітика та аудит — вивчаємо архітектуру додатка, версії SDK, існуючу рекламу. Заміряємо поточні метрики (fill rate, CTR, ARPU).
- Розробка стратегії — визначаємо точки показу, cooldown, частоту, винятки. Враховуємо сценарії користувачів.
- Інтеграція коду — реалізуємо менеджер реклами з попереднім завантаженням, обробкою помилок, витоками. Пишемо код під iOS (Swift) та Android (Kotlin).
- Тестування — проводимо на 5+ пристроях з різними версіями ОС. Перевіряємо edge case: відсутність мережі, швидкий перехід між екранами, сповіщення.
- Деплой та аналітика — вбудовуємо відстеження подій (
onAdImpression,onAdDismissed). Підключаємо логування в Firebase або Amplitude.
| Етап | Тривалість |
|---|---|
| Аудит | 0.5 дн |
| Стратегія | 1 дн |
| Інтеграція | 1–3 дн |
| Тестування | 1 дн |
| Документація | 0.5 дн |
Терміни: від 1 до 5 днів залежно від складності. Вартість впровадження розраховується індивідуально.
Обробка подій
Мінімальний набір для аналітики:
-
onAdImpression/adDidRecordImpression— зараховуємо показ -
onAdDismissedFullScreenContent— продовжуємо користувацький сценарій -
onAdFailedToShowFullScreenContent— логуємо помилку, не блокуємо UX
Ці колбеки допомагають відстежувати ефективність і швидко реагувати на проблеми. Додатково рекомендуємо передавати метадані (рівень, дія користувача) в аналітику.
Що дає правильна стратегія?
При грамотному налаштуванні заповнюваність досягає 95%, а відтік користувачів знижується на 20–30%. Згідно з рекомендаціями Google AdMob, Interstitial має використовуватися лише в природних паузах. Зв'яжіться з нами — ми підберемо оптимальне рішення для вашого додатка. Замовте впровадження Interstitial з урахуванням best practices — отримайте стабільний дохід без втрати аудиторії.







