Інтеграція Rewarded Ads у мобільному застосунку
Ми впроваджуємо Rewarded — єдиний рекламний формат, який користувачі дивляться добровільно. Конверсія в перегляд там, де він вбудований органічно в механіку (додаткове життя, бонусна валюта, розблокування рівня), сягає 40–70% від показів кнопки. Не дивно, що eCPM у rewarded у 3–10 разів вищий за interstitial, а LTV застосунку при правильній інтеграції зростає на 25% при скороченні часу до першої покупки на 15%. Наш досвід: 50+ проєктів з монетизацією, сертифікація Google AdMob та App Store.
Але у цього формату є специфіка: фіксація моменту видачі нагороди. Якщо реалізувати неправильно, користувачі отримують нагороди без перегляду реклами — або не отримують після чесного перегляду. Обидва варіанти руйнують довіру, знижують дохід і можуть призвести до видалення застосунку зі сторів.
Де конкретно ламається логіка видачі нагород
Помилка №1: видаємо нагороду в onAdDismissed.
// НЕПРАВИЛЬНО
rewardedAd?.fullScreenContentCallback = object : FullScreenContentCallback() {
override fun onAdDismissedFullScreenContent() {
giveReward() // користувач міг закрити на 3-й секунді
}
}
onAdDismissedFullScreenContent спрацьовує при будь-якому закритті — і після повного перегляду, і після натискання кнопки «закрити» на початку. Нагорода потрібна лише в onUserEarnedReward:
rewardedAd?.show(activity) { rewardItem ->
// Цей callback = користувач додивився до кінця
val rewardAmount = rewardItem.amount
val rewardType = rewardItem.type
giveReward(rewardType, rewardAmount)
}
Помилка №2: клієнтська верифікація.
Видавати нагороду прямо в onUserEarnedReward — нормально для простих випадків (додати життя в пам'яті). Але якщо нагорода впливає на серверний стан (віртуальна валюта, premium-контент) — потрібна серверна верифікація через SSV (Server-Side Verification).
Як працює серверна верифікація (SSV)?
SSV гарантує, що нагорода нараховується лише після підтвердження від рекламної мережі. Схема роботи:
- Застосунок запитує rewarded з
customData — рядком з userId та nonce.
- Після перегляду рекламна мережа (AdMob/IronSource) робить GET-запит на ваш verification endpoint.
- Параметри запиту підписані ECDSA-ключем мережі (публічний ключ можна отримати з gstatic.com).
- Ваш сервер верифікує підпис, нараховує нагороду.
- Клієнт отримує підтвердження через WebSocket або polling.
// Передаємо userId в customData при завантаженні
val serverSideVerificationOptions = ServerSideVerificationOptions.Builder()
.setCustomData("userId:${currentUser.id};nonce:${UUID.randomUUID()}")
.build()
val adRequest = AdRequest.Builder().build()
RewardedAd.load(context, AD_UNIT_ID, adRequest, object : RewardedAdLoadCallback() {
override fun onAdLoaded(ad: RewardedAd) {
ad.setServerSideVerificationOptions(serverSideVerificationOptions)
rewardedAd = ad
}
})
SSV критичний для будь-якого застосунку, де валюта конвертується в реальні цінності або впливає на PvP-баланс. Клієнти економлять у середньому 30% бюджету на доробках завдяки впровадженню SSV з першого дня.
Порівняння рекламних форматів
| Формат |
Opt-in |
Opt-out |
eCPM |
Конверсія |
| Rewarded |
Так |
Ні |
Високий (3–10x вище interstitial) |
40–70% |
| Interstitial |
Ні |
Так |
Низький |
~10% |
| Rewarded Interstitial |
Ні |
Так (але з нагородою) |
Середній |
20–30% |
Rewarded Interstitial — гібридний формат: не вимагає явного opt-in, але винагороджує за перегляд. eCPM на 50% вищий за звичайний interstitial.
Порівняння: серверна верифікація vs клієнтська
| Характеристика |
Клієнтська верифікація |
SSV |
| Захист від підробки |
Ні |
Так (криптографія ECDSA) |
| Додаткове навантаження на сервер |
Ні |
Так (частки секунди) |
| Ризик нарахування без перегляду |
Високий |
Нульовий |
| Час на інтеграцію |
1 день |
+2 дні |
UX-управління показом
Кнопку «Переглянути рекламу» потрібно показувати лише коли реклама завантажена — тобто коли rewardedAd != null. Сіра неактивна кнопка гірша, ніж прихована. Завантаження починаємо завчасно: одразу після попереднього показу або при відкритті екрана, де кнопка може з'явитися.
Якщо завантаження не вдалося — ховаємо кнопку, не показуємо помилку користувачеві. Retry з експоненційним backoff (1 → 2 → 4 → 8 сек) реалізуємо тихо в фоні.
Чому важлива правильна видача нагород?
Неправильна видача веде до фінансових втрат і негативних відгуків. Наші клієнти економлять у середньому 30% бюджету на доробках завдяки впровадженню SSV з першого дня. Ми гарантуємо коректну логіку нагородження та документуємо кожен етап інтеграції.
Типові сценарії для SSV
- Видача premium-валюти, яка конвертується в реальні гроші.
- Розблокування PvP-ендшпіля після перегляду.
- Абонентський доступ (тимчасові бонуси).
Що входить у роботу
- Аналіз вимог до нагород і економіки застосунку
- Вибір і налаштування рекламної мережі (AdMob, IronSource, Unity Ads)
- Реалізація показу Rewarded Ads з урахуванням UX
- Впровадження серверної верифікації (SSV) при необхідності
- Написання документації та коду з коментарями
- Тестування всіх сценаріїв (успішний показ, помилка, перевищення лімітів)
- Навчання команди замовника роботі з інструментами
Терміни та вартість
Базова реалізація rewarded без SSV — 1–2 дні. З серверною верифікацією та інтеграцією в ігрову економіку — 2–3 дні. Вартість розраховується індивідуально після аналізу проєкту. Замовте консультацію — наші інженери оцінять ваш проєкт і запропонують рішення під ключ. Отримайте вивірену інтеграцію, яка збільшить дохід і задоволеність користувачів.
Монетизація мобільних додатків: IAP, підписки та рекламна медіація
Додаток з погано реалізованими покупками втрачає гроші не тому що користувачі не хочуть платити, а тому що StoreKit транзакція зависає, Receipt Validation падає з помилкою або restore purchases не працює — і користувач пише в підтримку або залишає 1 зірку. Наш досвід (більше 7 років у мобільній розробці) показує, що грамотна монетизація збільшує LTV на 30–60% вже в перші три місяці після впровадження. Отримайте консультацію з монетизації вашого додатка — проаналізуємо поточну модель і знайдемо точки зростання.
Чому StoreKit 2 — найкращий вибір для IAP?
StoreKit 2 (iOS 15+) — сучасний API з async/await та верифікованими транзакціями на стороні пристрою без сервера. Transaction.currentEntitlements повертає всі активні покупки. Ключова зміна порівняно з StoreKit 1: верифікація JWS-підпису на пристрої через VerificationResult<Transaction> — не потрібно надсилати receipt на сервер для базової перевірки.
Але сервер-сайд валідація все одно потрібна для consumable покупок та проти fraud. App Store Server API замінює старий /verifyReceipt endpoint. Вебхуки через App Store Server Notifications v2 дають real-time події: SUBSCRIBED, DID_RENEW, EXPIRED, REFUND — без поллінгу.
Типова помилка: не обробляють paymentQueue(_:updatedTransactions:) у фоні для незавершених транзакцій. Користувач купив consumable, додаток впав до finishTransaction — покупка висить у черзі, при наступному запуску відновлюється та вимагає повторної обробки на сервері. Без ідемпотентності сервера — подвійне нарахування.
Як не втратити дохід на підписках?
Підписочна модель вимагає відстеження станів: тріал → активна → grace period → expired → refunded. RevenueCat — фактичний стандарт для керування підписками в продакшні. Абстрагує StoreKit та Google Play Billing, дає unified API, webhooks, аналітику когорт та A/B тести paywall.
Альтернатива RevenueCat — власна реалізація з Adapty або Qonversion. Повністю кастомна — тільки якщо дані не повинні залишати інфраструктуру або є нестандартна логіка. Ми гарантуємо, що налаштування webhooks та обробка подій життя підписки виконується без втрат — перевірено на проектах з аудиторією понад 500 тис. DAU.
Google Play Billing Library 6+ вимагає обробки PurchasesUpdatedListener та явного виклику acknowledgePurchase() або consumePurchase() протягом 3 днів — інакше Google автоматично скасовує покупку та повертає гроші. Середня вартість такої помилки — втрата значної суми на користувача на місяць (за даними наших проектів).
Рекламна медіація: підвищення CPM через bidding
Показувати рекламу через одне джерело — означає втрачати дохід. Медіація (waterfall або bidding) запитує рекламу у декількох мереж і показує найкращу ставку. Google AdMob — основа для banner, interstitial, rewarded. Медіація через AdMob Mediation або MAX (AppLovin) — другий де-факто стандарт. MAX використовує In-App Bidding — real-time аукціон без водоспаду. На практиці MAX дає CPM на 15-30% вище класичного waterfall (залежить від гео та аудиторії). У США для rewarded відео CPM може перевищувати певну суму. При 100 000 показів rewarded відео на день перехід з waterfall на In-App Bidding може приносити додатково значну суму щоденно.
ironSource (Unity Ads) — сильна позиція в ігровому сегменті, особливо rewarded video. Mintegral — добре закриває азійську аудиторію.
Налаштування медіації вимагає ATT (App Tracking Transparency) на iOS 14+. Без requestTrackingAuthorization рекламний CPM падає в 3-5 разів для користувачів, які не погодилися. SKAdNetwork та Privacy Manifest (iOS 17) — обов'язкові вимоги, без яких рев'ю падає.
| Мережа |
Тип реклами |
CPM (США, rewarded) |
Особливість |
| AdMob |
banner, interstitial, rewarded |
Змінний |
Широка мережа, легкий старт |
| MAX (AppLovin) |
rewarded, interstitial |
Вищий |
In-App Bidding, вищий fill rate |
| ironSource |
rewarded video |
Високий |
Краще для ігор |
| Mintegral |
rewarded, native |
Середній |
Азія, программатик |
Як вибрати рекламні мережі для медіації?
Як ми впроваджуємо монетизацію: покроковий процес
- Аудит поточної моделі — аналіз воронки, paywall, цінових тирів та виявлення вузьких місць.
- Проектування моделі — вибір типу (subscription, consumable, non-consumable) та оптимізація цінових точок.
- Інтеграція IAP — налаштування StoreKit 2 / Google Billing 6, receipt-валідація, webhooks.
- Рекламна медіація — підключення 3-6 мереж, налаштування waterfall або In-App Bidding, тестування fill rate.
- Аналітика та когорти — інтеграція RevenueCat, Amplitude або Firebase для відстеження LTV.
- A/B тестування paywall — використання Remote Config для експериментів без релізу.
- Запуск та моніторинг — 2 тижні безкоштовної підтримки після запуску, фікс багів по SLA 24 години.
Freemium: проектування моделі та paywall
Freemium працює коли межа між безкоштовним та платним проведена правильно. Занадто жорсткий paywall на старті — користувач видаляє. Занадто щедрий безкоштовний тир — немає стимулу платити.
Як проєктувати paywall для freemium?
Паттерн, який працює технічно: feature flags з сервера (Remote Config у Firebase або LaunchDarkly) керують доступом до фіч. Це дозволяє A/B тестувати paywall без релізу, змінювати умови тріалу, проводити акції.
Реалізація на рівні коду: EntitlementManager — єдина точка перевірки доступу до фіч, яка знає про статус підписки, флаги та промо. Жодних перевірок isPremium розкиданих по всьому коду. Досвід показує: такий підхід знижує кількість багів з paywall на 80% (підтверджено на 30+ проектах).
Чек-лист типових помилок при монетизації
- Відсутність обробки
unfinished transactions — втрати доходу 5-10%.
- Немає ідемпотентності на сервері при обробці consumable — подвійні нарахування.
- Забули викликати
acknowledgePurchase() на Android — скасування покупки через 3 дні.
- Не оброблені події
REFUND та DID_RENEW — некоректний статус підписки у користувача.
- Paywall без A/B тестів — залишають 20-40% потенціалу монетизації.
- Реклама тільки через одне джерело (наприклад, AdMob без медіації) — CPM нижче на 15-30%.
Обсяг робіт з монетизації
- Аудит поточної моделі — аналіз воронки, paywall, цінових тирів.
- Інтеграція IAP — StoreKit 2 / Google Billing 6, receipt-валідація, webhooks.
- Рекламна медіація — налаштування MAX / AdMob, підключення 3-6 мереж, тестування fill rate.
- Налаштування аналітики — RevenueCat, Amplitude / Firebase, когортний аналіз.
- Документація — опис ентайтлментів, процедура відновлення, чек-лист рев'ю.
- Навчання команди — розбір типових помилок, рекомендації з підтримки.
- Гарантія — безкоштовна підтримка 2 тижні після запуску, фікс багів по SLA 24 години.
Терміни орієнтовно
| Етап |
Тривалість |
| Базова IAP (один store) |
1–2 тижні |
| Підписочна система + RevenueCat + paywall |
3–5 тижнів |
| Рекламна медіація (MAX + 3 мережі) |
1–2 тижні |
| Повний цикл (IAP + реклама + аналітика) |
4–8 тижнів |
Вартість розраховується індивідуально. Ми працюємо в цій сфері більше 8 років і реалізували більше 40 проектів з монетизацією — багато з них пройшли App Store Review без жодного блокування. Зв'яжіться з нами для аудиту або замовте консультацію — розповімо, які точки зростання є у вашому додатку.
Джерела: Apple StoreKit 2 Documentation, RevenueCat Best Practices, Wikipedia: Freemium.