Разработка мобильного приложения для подписки на контент (Patreon-модель)
Patreon-модель на мобилке упирается в один ключевой конфликт: App Store и Google Play требуют, чтобы цифровой контент продавался через их IAP (In-App Purchase) с комиссией 15–30%. Но создатель контента уже продаёт тот же контент через веб-сайт дешевле. Пользователь это видит, задаёт неудобные вопросы, а приложение рискует отклонением за нарушение п. 3.1.1. Правильная архитектура начинается с юридического и технического ответа на этот вопрос.
IAP vs внешние платежи: где граница
App Store правила разрешают «reader apps» (приложения, открывающие контент, купленный снаружи) ссылаться на внешний сайт для покупки — после разрешения Apple External Link Account entitlement (доступен в США, ЕС по DMA, Южной Корее). На практике:
- Подписка оформлена через веб — приложение только открывает контент, не продаёт. Review проходит, если нет CTA «Подпишись» внутри приложения ведущего на IAP, и есть External Link entitlement там где разрешено.
- IAP-подписка внутри приложения — Apple/Google берут комиссию 15–30%. Зато бесшовный UX, и приложение может предлагать подписку прямо в app.
- Гибрид — web-покупка для новых подписчиков (внешняя ссылка), IAP для тех кто хочет купить in-app. Легально, но сложнее поддерживать два billing flow.
Архитектура доступа к контенту
EntitlementManager — центральный компонент. Источники правды о доступе:
- StoreKit 2 Transaction.currentEntitlements (если IAP).
- Backend subscription status (если web-billing или RevenueCat как агрегатор).
При старте приложения: параллельно проверяем оба источника, берём максимальный доступ. Cервер присылает JWT с tier, expires_at — клиент валидирует подпись, кеширует. Обновление каждые 24 часа или по subscription_updated push.
Tier-based доступ: EntitlementManager.hasAccess(tier: .premium, feature: .exclusivePosts) — единая точка проверки. ContentRepository фильтрует фид: locked посты показываются с preview + paywall blur overlay, unlocked — полностью.
Медиаконтент и DRM
Видео для платных подписчиков не должно быть доступно по прямому URL без авторизации. Схема: приложение запрашивает signed_url с TTL 15 минут (/content/{id}/stream?token=...). URL подписывается на сервере (CloudFront Signed URL / Google Cloud CDN Signed URLs). AVPlayer (iOS) / ExoPlayer (Android) воспроизводит через HLS — кеширование сегментов автоматическое через AVAssetDownloadTask (iOS) для offline просмотра.
Для более строгой защиты — FairPlay Streaming (iOS) / Widevine (Android). Это DRM уровня Netflix/Spotify. Требует лицензионного сервера (можно интегрировать через Axinom DRM, EZDRM, BuyDRM). Для большинства creator-платформ overkill, но если контент высококонкурентный — оправдан.
Аудио подкасты без DRM обычно достаточно signed URLs. AVAudioPlayer / MediaPlayer / ExoPlayer для воспроизведения, фоновое воспроизведение через AVAudioSession (.playback category) + CommandCenter (iOS) / MediaSession API (Android) — управление с экрана блокировки.
Лента постов и взаимодействие с автором
Chronological + algorithmic feed через UICollectionView DiffableDataSource / Jetpack LazyColumn. Пагинация — cursor-based (не offset — при добавлении новых постов offset сбивается). FeedRepository с Paging 3 (Android) или кастомным PaginatedFeedLoader (iOS).
Комментарии с real-time обновлением через WebSocket или long polling. Реакции — optimistic update: UI обновляется немедленно, в фоне идёт API запрос, при ошибке откатываем. Это стандартный паттерн для низкой perceived latency.
Прямые трансляции (live) — HLS + low latency mode (Apple LL-HLS / DASH) с AVPlayer / ExoPlayer. Чат в прямом эфире — WebSocket.
Уведомления и вовлечённость
Push о новом посте от автора, на которого подписан пользователь. На клиенте — настройки нотификаций per-creator: пользователь выбирает, от кого получать push. Токен устройства хранится на сервере привязанным к creator_subscription_ids — сервер отправляет push только релевантной аудитории, не broadcast всем.
Процесс работы
Анализ App Store / Play Store политик для конкретной модели монетизации → проектирование EntitlementManager и billing flow → разработка фида + медиаплеера + paywall → push-уведомления → QA (включая subscription edge cases: grace period, refund, restore purchases) → публикация.
Ориентиры по срокам
MVP (фид постов, видео/аудио плеер, IAP подписка, базовые комментарии): 5–8 недель. Полноценная creator-платформа с live стримингом, DRM, аналитикой для авторов и поддержкой нескольких tier подписок: 3–4 месяца.







