Интеграция RevenueCat для управления подписками
RevenueCat решает конкретную проблему: синхронизировать статус подписки между iOS, Android и бэкендом без написания собственного сервера валидации receipts. Вместо того чтобы самостоятельно разбираться с Apple Server Notifications v2 и Google Play RTDN, получаем единый CustomerInfo объект с актуальным статусом.
Что происходит под капотом
RevenueCat SDK оборачивает нативный StoreKit (iOS) и Google Play Billing (Android). При покупке SDK отправляет receipt/purchaseToken на серверы RevenueCat, те верифицируют у Apple/Google и возвращают нормализованный статус. На стороне RevenueCat хранится история всех транзакций — это позволяет восстанавливать доступ на новых устройствах без вызова нативного restore.
Интеграция
// 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 в дашборде, код не меняется.
Синхронизация между платформами
Если пользователь купил подписку на iOS и открывает Android-версию — передаём один и тот же appUserID при конфигурации SDK на обеих платформах. RevenueCat отдаст CustomerInfo с активным entitlement независимо от платформы покупки. Это работает только если пользователь аутентифицирован в приложении — для анонимных RevenueCat генерирует $RCAnonymousID, который не переносится между устройствами автоматически.
Webhooks и серверная синхронизация
RevenueCat отправляет webhooks при любом изменении статуса подписки: INITIAL_PURCHASE, RENEWAL, CANCELLATION, EXPIRATION, BILLING_ISSUE. Это полноценная замена Apple Server Notifications + Google RTDN в одном интерфейсе. Настраивается в Project Settings → Integrations.
Для бэкенда — один endpoint вместо двух (Apple + Google), единый формат payload. Экономит 2–3 дня разработки серверной части.
Ограничения
RevenueCat берёт 1% от revenue после $2500/месяц. Для большинства приложений это приемлемо в обмен на сэкономленное время. Но при масштабе $100k+/месяц — считайте, возможно выгоднее собственная реализация.
Сроки интеграции — 2–3 дня: установка SDK, настройка products и entitlements в дашборде, интеграция в существующий flow аутентификации, тестирование в Sandbox/Test environment.







