Реалізація Freemium-моделі монетизації мобільного застосунку
Freemium — не «безплатна версія з обмеженнями». Freemium — це спроектований опит, де безплатна версія достатньо хороша, щоб користувач залишився, але недостатньо хороша, щоб premium не потрібен. Неправильно нарізана границя безплатного/платного — або вбиває activation, або вбиває конверсію.
Де провести границю
Три роблячих паттерни нарізки freemium:
Feature gating. Базові функції безплатні, продвинуті — за деньги. Приклад: неограниченное создание задач (безплатно) + колаборація з командою (premium). Проблема: якщо платні фічи можна отримати у конкурента безплатно — смисл теряется.
Usage limits. Ті ж функції, але з лімітами: 3 проекти безплатно, неограниченно — у premium. AI-запити: 10 на день безплатно, неограниченно — платно. Ліміти мають бути достатніми, щоб зрозуміти цінність, але недостатніми для повноцінного користування.
Quality gating. Експорт без водяного знака, висока якість рендеру, пріоритетна обробка — все це premium рівні однієї функції. Популярно в media/creative застосунках.
На клієнті кожна фічу перевіряється через EntitlementManager.canUse(.featureName). Централізована логіка — не if-else по всьому коду, а єдиний FeatureFlag + Entitlement layer.
Soft gate vs Hard gate
Hard gate — функція недоступна для безплатних користувачів фізично (кнопка неактивна або схована). Використовуємо для функцій, які вимагають серверних ресурсів (AI processing, cloud storage).
Soft gate — функція доступна, але при спробі використати показує paywall. Tap на locked feature → bottom sheet з описанням що розблокує premium → CTA купити. Конвертує краще: користувач бачить цінність фічи, перш ніж йому пропонують купити.
iOS реалізація soft gate через FeatureGateModifier у SwiftUI:
Button("Export HD") { viewModel.exportHD() }
.featureGated(.hdExport, paywallTrigger: .featureTap)
featureGated modifier перевіряє entitlement, при його відсутності перехоплює tap та показує Paywall замість дії.
Ліміти та їх відображення
Користувач повинен бачити свої ліміти. Схований ліміт, який спрацює несподівано («Ви досягли ліміту AI-запитів») — раздражує. Краще: прогрес-бар ліміту видно завжди («7 з 10 AI запитів використано сьогодні»), при досяганні 80% — м'яке nudge «Розглянете premium для неограниченних запитів».
Ліміти зберігаються на сервері — клієнт тільки відображає. Reset лімітів: щоденний через server-side cron, клієнт отримує оновлений usage_quota при запиті профілю або через push {"type": "quota_reset"}.
Конверсійні триггери
Freemium вимагає продуманих моментів показу paywall. Органічні триггери (користувач сам натовкнувся на ліміт) конвертують краще принудових (показали paywall через 3 дні незалежно від поведінки). PaywallTrigger enum: .usageLimitReached, .featureTapped, .exportAttempted, .scheduled(day: 7) — кожен триггер A/B тестується.
Retention-driven upsell: якщо користувач регулярно використовує застосунок 7 днів — показуємо paywall з messaging «Ти активний користувач, отримай максимум». Це краще перводневого paywall: Day-7 retention для таких користувачів 70%+, значить цінність вони зрозуміли.
Downgrade-сценарій
Користувач відмінив підписку — переходить на безплатний план. Плавний downgrade, а не жорсткий. Якщо у нього було 15 проектів та безплатний ліміт 3 — не видаляємо 12 проектів миттєво. Помічаємо як read-only при downgrade, показуємо повідомлення «Ваші 15 проектів збережені — відновіть premium для редагування». Це мотивує повернутися.
На клієнті DowngradeManager при зміні entitlement з premium на free вичислює, який контент виходить за ліміти, та оновлює UI без видалення даних.
StoreKit 2 / Play Billing інтеграція
Auto-renewable subscription: product.subscription?.renewalInfo містить willAutoRenew — показуємо на екрані настроєк статус підписки. Manage subscription: URL(string: "https://apps.apple.com/account/subscriptions") для iOS, launchBillingFlow з SubscriptionUpdateParams для upgrade/downgrade між планами на Android.
Процес роботи
Проектування Feature Map (що входить у free, що у premium) → EntitlementManager + FeatureGate layer → ліміти та їх відображення → paywall-триггери → StoreKit 2 / Play Billing підписка → downgrade-логіка → A/B тест setup → QA → публікація.
Ориентири по срокам
Реалізація freemium-моделі з EntitlementManager, feature gating, лімітами та soft/hard gates — 5 робочих днів при готовій IAP інтеграції. З нуля включаючи StoreKit 2 / Play Billing setup — 1,5–2 тижні.







