Реалізація баннерної реклами у мобільному додатку
Банер — найпростіший формат по інтеграції, але з найбільшою кількістю UX-помилок у production. Типова картина: банер стрибає при завантаженні та зміщує контент, розмір фіксований 320×50 (який Google вже вважає застарілим), на планшеті — крихітна полоска посередині широкого екрана. Все це вирішується правильним вибором розміру та управлінням layout на етапі інтеграції, а не після ревю.
Адаптивний банер замість фіксованого
Google AdMob з версії 19.x рекомендує adaptive banner замість BANNER (320×50) та LEADERBOARD (728×90). Адаптивний банер отримує ширину контейнера та сам вибирає оптимальну висоту:
// Android
val adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(context, adContainerWidth)
adView.setAdSize(adSize)
// iOS
let viewWidth = view.frame.inset(by: view.safeAreaInsets).width
let adaptiveSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSize(forWidth: viewWidth)
bannerView.adSize = adaptiveSize
Висота адаптивного банера — від 50 до 90 dp залежно від ширини. Це важливо для layout: не можна захардкодити layout_height="50dp" — банер либо обрізається, либо залишить порожнє місце. Правильний підхід — слухати onAdLoaded та установити висоту програмно через adView.adSize.getHeightInPixels(context).
Проблема стрибка контенту
Найбільш дратівна помилка баннерної реклами — коли при завантаженні банера контент екрана зміщується вниз. Google за це понижує рейтинг в магазині. Рішення: резервувати місце для банера до його завантаження.
На Android: контейнер FrameLayout з фіксованою висотою wrap_content та початковим visibility="invisible". Після onAdLoaded — View.VISIBLE. Контент не стрибає, місце вже зарезервовано.
На iOS з autolayout: додаємо NSLayoutConstraint для висоти банера з початковим значенням 0, оновлюємо constraint після завантаження через UIView.animate.
Sticky-банер внизу екрана
Найпопулярніше розміщення — закріплений банер над tab bar або navigation bar. Нюанс: на iPhone з Dynamic Island або notch потрібно враховувати safeAreaInsets.bottom. Банер, що перекриває home indicator, Apple відхиляє при ревю — бачили кілька таких випадків.
bannerView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
bannerView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor),
bannerView.centerXAnchor.constraint(equalTo: view.centerXAnchor)
])
Оновлення та життєвий цикл
Банер потрібно зупиняти при уходе додатку в фон (onPause / applicationWillResignActive) та возобновити при поверненні. Без цього можливий IllegalStateException на Android при спробі завантажити нове оголошення в неактивній Activity.
Автообновлення (за замовчуванням 60 сек в AdMob) можна налаштувати в консолі, але не через SDK — це обмеження навмисне. Якщо потрібна інша частота — використовуйте AdView.pause() / resume() в поєднанні з ручним таймером.
Графіки інтеграції баннерної реклами — 1–2 дні з урахуванням тестування на різних пристроях та розмірах екрана.







