Интеграция RevenueCat для управления подписками
Пользователь купил годовую подписку за $49.99 на iPhone, но на Android она не активна. Разработчику приходится тратить 2–3 недели. Нужна серверная валидация receipts, настройка Apple Server Notifications v2 и Google Play RTDN. Мы решаем эту задачу за 2–3 дня с помощью RevenueCat — экономия времени и денег.
RevenueCat предоставляет единый CustomerInfo с актуальным статусом подписки для всех платформ. SDK оборачивает нативный StoreKit (iOS) и Google Play Billing (Android). При покупке receipt или purchaseToken отправляется на серверы RevenueCat, те верифицируют у Apple и Google и возвращают нормализованный статус. История всех транзакций хранится на стороне RevenueCat — это позволяет восстанавливать доступ на новых устройствах без вызова нативного restore. Согласно официальной документации RevenueCat, SDK обрабатывает более 10 000 событий в секунду для крупных клиентов.
Как RevenueCat решает проблему синхронизации?
Если пользователь аутентифицирован в приложении, мы передаём одинаковый appUserID при конфигурации SDK на iOS и Android. RevenueCat отдаёт CustomerInfo с активным entitlement независимо от платформы покупки. Для анонимных пользователей генерируется $RCAnonymousID, который не переносится между устройствами — это ограничение, но его можно обойти, попросив пользователя авторизоваться после установки.
// iOS — AppDelegate или @main Purchases.configure( with: Configuration.Builder(withAPIKey: "appl_xxxxx") .with(appUserID: currentUser.id) // nil = анонимный .build() ) // Покупка через RevenueCat let (transaction, customerInfo, error) = await Purchases.shared .purchase(package: package) if customerInfo?.entitlements["premium"]?.isActive == true { unlockPremium() } Ключевая концепция — entitlements. В дашборде RevenueCat создаём entitlement premium, привязываем к нему все продукты (месячная подписка, годовая, lifetime). В коде проверяем только entitlement, а не конкретный product ID. При добавлении нового тарифного плана достаточно добавить продукт в entitlement в дашборде — код не меняется.
Что такое entitlements и зачем они нужны?
Entitlement — это логическая группа продуктов, дающих одинаковые права доступа. Например, все премиум-подписки (месячная, годовая, lifetime) объединяются в entitlement premium. Разработчику достаточно проверять isActive для этого entitlement, не заботясь о конкретных идентификаторах продуктов. Это позволяет гибко менять тарифы без изменения кода приложения.
Почему RevenueCat лучше собственной реализации?
| Аспект | Собственная реализация | RevenueCat |
|---|---|---|
| Время на серверную часть | 2–3 недели | 2–3 дня |
| Нагрузка на команду | Требуется сервер, поддержка двух нотификационных систем | Один SDK, один Webhook |
| Ошибки при синхронизации | Вероятны, особенно при edge cases (отмена, billing issue) | Протестированы тысячами приложений, снижение багов на 90% |
| Масштабирование | При росте дохода требуется рефакторинг | Комиссия 1% после $2500/мес, но всё остальное — out of the box |
Собственная реализация обойдётся в $10 000–$20 000 на разработку, тогда как интеграция RevenueCat стоит значительно меньше и окупается за счёт быстрого запуска.
Какие события обрабатывает Webhook RevenueCat?
| Событие | Описание |
|---|---|
| INITIAL_PURCHASE | Первая покупка подписки |
| RENEWAL | Автоматическое продление |
| CANCELLATION | Отмена подписки пользователем |
| EXPIRATION | Истечение срока без продления |
| BILLING_ISSUE | Проблема с оплатой (карта отклонена и т.д.) |
Все события приходят в едином JSON-формате, что упрощает серверную интеграцию: достаточно одного endpoint вместо двух для Apple и Google. RevenueCat автоматически повторяет отправку при ошибках (до 3 раз), что снижает риск потери данных.
Как настроить entitlement в дашборде?
В дашборде RevenueCat создаётся entitlement premium, к нему привязываются продукты с соответствующими productId из App Store Connect и Google Play Console. Проверка в коде: `customerInfo.entitlements["premium"]?.isActive == true`. При добавлении нового тарифа код не меняется — достаточно добавить продукт в entitlement.Что входит в интеграцию RevenueCat?
- Установка SDK для iOS (Swift) и Android (Kotlin/Java) — при необходимости обёртка для Flutter или React Native.
- Настройка products и entitlements в дашборде RevenueCat, привязка к Google Play и App Store Connect.
- Интеграция существующего flow аутентификации — передача appUserID.
- Реализация paywall с использованием RevenueCat Offerings — A/B-тестирование цен.
- Настройка Webhook для отправки событий на ваш бэкенд — единый формат.
- Тестирование в Sandbox (iOS) и Test environment (Android) — проверка всех сценариев: новая покупка, продление, отмена, восстановление.
- Передача доступов к дашборду и документация.
- Поддержка после запуска — помощь в настройке аналитики и отчетов.
Процесс работы: от аналитики до деплоя
- Аналитика: определяем текущую модель подписок, scope пользователей, требования к аутентификации.
- Проектирование: схема entitlements, mapping продуктов, интеграция Webhook с вашим API.
- Реализация: установка SDK, интеграция в приложение, настройка дашборда.
- Тестирование: unit-тесты на серверном эндпоинте, тестовые покупки на обеих платформах.
- Деплой: публикация в App Store и Google Play, мониторинг первых транзакций.
Сроки и гарантии
Интеграция RevenueCat занимает от 2 до 5 дней в зависимости от сложности аутентификации и количества продуктов. Мы гарантируем стабильную синхронизацию статусов подписок между платформами. У нас более 8 лет опыта в мобильной разработке и 30+ реализованных подписочных моделей. Закажите интеграцию RevenueCat — свяжитесь с нами для консультации и получите предварительный расчёт.







