Реализация Hard Paywall (без возможности пропуска) в мобильном приложении
Hard paywall блокирует доступ к контенту или функциям без оплаты, без возможности пропустить. Это наиболее агрессивная, но при правильном применении наиболее конверсионная модель. Главная ошибка при реализации — нарушить правила App Store или создать UX, при котором пользователь чувствует себя обманутым.
App Store правила для hard paywall
Apple внимательно смотрит на hard paywall при ревью. Отклонение по 3.1.1 происходит, если:
- Приложение не работает вообще без покупки, но в описании нет явного упоминания что это платный продукт.
- Пользователь не может ни на что нажать без подписки (даже на «Посмотреть тарифы» или «Войти»).
- Hard paywall показывается немедленно при первом запуске без демонстрации хотя бы минимальной ценности.
Допустимые схемы с hard paywall: онбординг показывает ключевые фичи → paywall. Или: trial период (3–7 дней бесплатно) → hard paywall по истечении. Приложение в описании явно указано как subscription-based.
Onboarding + Hard Paywall как воронка
Стандартная конверсионная схема:
- Onboarding (2–4 экрана) — демонстрация ценности через конкретные фичи, не абстрактные обещания.
- Personalization step — вопросы о цели пользователя (жанр для читалки, цель тренировки для фитнес-приложения). Ответы не обязательно влияют на алгоритм — важен psychological investment (пользователь вложился, сложнее уйти).
- Hard Paywall — после того как пользователь «настроил» продукт под себя.
На клиенте: OnboardingCoordinator управляет шагами, PaywallCoordinator — финальный шаг онбординга. После успешной покупки — переход в главный экран без возможности вернуться на paywall.
Обязательные элементы hard paywall
Restore Purchases — обязателен. Пользователь переустановил приложение — должен восстановить подписку. AppStore.sync() (StoreKit 2) или BillingClient.queryPurchasesAsync() (Android) для восстановления. Без этой функции — отклонение App Store, злые отзывы.
SKPaymentQueue.canMakePayments() проверяем перед показом paywall — на некоторых устройствах (корпоративные MDM профили, Screen Time ограничения) IAP заблокированы. Если canMakePayments == false — показываем объяснение, не крашим.
Terms of Service / Privacy Policy ссылки — внизу экрана, мелким шрифтом, но доступны. Для subscription-приложений: явно указать сумму, период и условие автопродления в CTA кнопке или рядом: «7 дней бесплатно, затем $9.99/мес, отмена в любое время».
Блокировка навигации
Hard paywall не должен обходиться через back gesture или физическую кнопку назад. На iOS: UIViewController.isModalInPresentation = true запрещает swipe-to-dismiss для .pageSheet / .formSheet presentation. Для полноэкранного presentation — back gesture недоступен по умолчанию. На Android: override onBackPressed() / BackHandler (Compose) — либо ничего не делаем, либо показываем confirmation «Уверены? Без подписки приложение недоступно».
В NavigationStack (SwiftUI) или NavHost (Compose) — paywall экран не имеет NavigationBarBackButton и не находится в стандартном navigation stack, он presentирован модально поверх stack.
Introductory Offer
Hard paywall с trial конвертирует лучше без trial — это не значит что trial всегда нужен. Для утилитарных приложений (калькуляторы, инструменты) hard paywall без trial работает. Для lifestyle/habit/health — trial необходим, пользователь должен убедиться в ценности.
StoreKit 2 product.subscription?.introductoryOffer — показываем trial предложение только eligible пользователям. isEligibleForIntroOffer — async check, делаем при prefetch продуктов, кешируем результат.
Аналитика
Ключевые события для hard paywall: paywall_shown, paywall_purchase_started, paywall_purchase_success, paywall_purchase_failed, paywall_restore_tapped, paywall_restore_success. Эти события — основа для мониторинга health монетизации. Drop между purchase_started и purchase_success выше 20% — проблема с биллингом, нужно расследовать.
Ориентиры по срокам
Hard paywall с полным StoreKit 2 / Play Billing flow, restore, introductory offer, аналитикой событий и блокировкой навигации — 2–3 рабочих дня. С кастомным онбордингом как воронкой — плюс 3–5 дней на онбординг-экраны.







