Ефективний Soft Paywall з пропуском для мобільного додатку
Ми інтегруємо Soft Paywall з можливістю пропуску в мобільні додатки, балансуючи монетизацію та користувацький досвід. Такий підхід дозволяє не відлякати користувача на старті, а запропонувати платну підписку після того, як він оцінить цінність продукту. За 5 років роботи ми реалізували 20+ проєктів з paywall-механіками, і результати A/B тестів показують: конверсія при правильних тригерах зростає в 2–3 рази. В одному edtech-додатку перехід від жорсткого paywall до Soft Paywall з skip-кнопкою збільшив конверсію в 4 рази (з 2% до 8%).
Як працює Soft Paywall з пропуском?
Soft Paywall відрізняється від хард-пейволу тим, що користувач може закрити paywall без покупки і продовжити користуватися функціоналом. Згідно з App Store Review Guidelines Section 4.2, кнопка пропуску має бути видна одразу і розташовуватися зручно. Це знижує фрустрацію та покращує сприйняття додатку.
Коли показувати — ефективний soft paywall
Типова помилка — показувати soft paywall при першому відкритті. Користувач ще не зрозумів цінність, закриває — показник «бачив paywall» зростає, конверсія ні. Правильні тригери:
- Після досягнення aha-moment (користувач створив перший проєкт, згенерував перший результат, пройшов перший урок).
- При спробі використати premium-фічу.
- Після N-го сеансу (3–5 відкриттів) — користувач повернувся, отже цінність відчув.
- За часом: на 3-й день використання безкоштовного періоду.
Усі ці тригери керуються через PaywallTriggerManager — логіка на сервері або в Firebase Remote Config. Коли показувати, як часто, через скільки сеансів — це параметри, які A/B тестуються.
Як правильно налаштувати тригери показу?
Тригери поділяються на два типи: event-based і time-based. Подієві — після конкретної дії користувача (створення, завершення). Часові — після визначеної кількості днів або сеансів. Найкращий результат дає комбінація: перший показ — event-based, повторні — time-based з урахуванням cooldown.
| Тип тригера |
Приклад |
Конверсія (A/B) |
| Event-based |
Після створення проєкту |
8–12% |
| Time-based |
3-й день використання |
5–7% |
| Intent-based |
Спроба premium-фічі |
15–20% |
Наприклад, у додатку для медитації intent-based тригер при спробі відкрити преміум-курс показав конверсію 18%, що на 25% вище, ніж середнє по ринку.
Чому кнопка Skip має бути доступною?
Кнопка «Пропустити» / «Продовжити безкоштовно» — не повинна бути прихованою. Apple при рев'ю відхиляє UI, де Skip умисно розташовано незручно, маленьким шрифтом або з'являється із затримкою. Правило: якщо безкоштовна версія функціонально працює — користувач повинен бачити шлях назад без перешкод.
З технічної сторони: натискання Skip логується в аналітику (Analytics.logEvent("paywall_skipped", parameters: ["trigger": triggerName, "variant": variantId])). Це дані для A/B тесту — різні варіанти paywall мають різний skip rate і conversion rate. Обидва числа важливі: paywall з нульовим skip rate і 1% конверсією гірший, ніж paywall з 40% skip rate і 5% конверсією. Soft paywall з skip-кнопкою конвертує в 2–3 рази краще, ніж жорсткий paywall без альтернатив.
Частота показу
Показувати soft paywall щоразу при відкритті premium-фічі — агресивно і дратує. Стандартна схема: показуємо, якщо lastPaywallShownAt було більше N днів тому АБО якщо користувач сам натиснув на premium-фічу (intent-triggered). lastPaywallShownAt зберігається в UserDefaults / SharedPreferences, оновлюється при кожному показі.
Серверна конфігурація через Remote Config: soft_paywall_cooldown_days: 3, max_impressions_per_week: 2 — змінюється без релізу при A/B тестуванні.
Overlay vs full-screen
Soft paywall може бути:
-
Half-sheet / bottom sheet —
UISheetPresentationController (iOS 15+) з .medium detent. Користувач бачить під ним контент, це знижує anxiety від «зачинений».
-
Full-screen modal з прозорим фоном (blur overlay) поверх контенту — для feature-triggered paywall, коли показуємо що саме доступно в premium.
-
Inline banner у стрічці на певній позиції — найменш агресивний варіант, конверсія нижча, але не перериває UX.
На iOS UISheetPresentationController з prefersGrabberVisible = true сигналізує користувачеві, що це dismissable sheet. Це не випадковість — люди частіше взаємодіють з UI, коли розуміють, що можуть вийти.
| Тип overlay |
Конверсія |
User experience |
| Bottom sheet |
8–12% |
Низька агресивність |
| Full-screen modal |
12–18% |
Середня, але ефективна |
| Inline banner |
3–5% |
Мінімальне вторгнення |
Soft paywall з inline banner показав на 30% менше відмов порівняно з full-screen modal в одному з наших проєктів.
Логіка після Skip
Користувач пропустив paywall — не показуємо йому кнопку «Upgrade» всюди агресивно. Зберігаємо запис про намір (user_intent_score) і використовуємо для більш точного таргетингу наступного показу: якщо користувач 3 рази намагався використати premium-фічу — наступний paywall показуємо раніше стандартного cooldown.
PaywallTriggerManager інкрементує premium_feature_attempt_count при кожній спробі. При досягненні порогу — показує paywall незалежно від cooldown.
Процес роботи
- Визначення тригерів показу разом з продуктом.
- Розробка PaywallTriggerManager + Remote Config інтеграція.
- UI paywall + skip логіка.
- Аналітика подій (skip rate, conversion).
- A/B тест setup (мінімум 2 варіанти).
- QA і публікація.
Детальніше про налаштування тригерів через Remote Config
У Remote Config ми заводимо параметри: paywall_triggers (JSON зі списком подій та часових умов), cooldown_days, max_impressions_per_week. Кожен тригер має пріоритет, weight для A/B тестів і флаг enabled. Це дозволяє змінювати логіку без релізу.
Орієнтири за термінами
Soft paywall з конфігурованими тригерами, аналітикою подій та Remote Config управлінням — від 2 до 3 робочих днів за готової IAP інтеграції та Server API.
| Етап |
Тривалість |
Результат |
| Аналітика та проєктування |
4–8 годин |
Специфікація тригерів і UI |
| Розробка компонентів |
1–2 дні |
PaywallTriggerManager + екран |
| Інтеграція з Remote Config |
2–4 години |
Параметри в консолі |
| A/B тест setup |
2–4 години |
Готовий спліт |
| QA і реліз |
4–8 годин |
Проходження рев'ю |
Що входить в роботу
- PaywallTriggerManager (iOS/Android)
- Інтеграція Remote Config
- Аналітика подій (Firebase, Amplitude)
- A/B тест (мінімум 2 варіанти)
- QA та документація
- Пост-релізна підтримка (2 тижні)
Гарантуємо стабільну роботу та відповідність App Store Review Guidelines. Для консультації щодо вашого проєкту — зв'яжіться з нами. Досвід 20+ paywall-інтеграцій — обговоримо ваш кейс. Отримайте консультацію інженера, щоб підібрати оптимальні тригери для вашого додатку.
Монетизація мобільних додатків: 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.