Ответ
Есть опыт реализации подписок с использованием нативного StoreKit 2 и платформы RevenueCat.
1. StoreKit 2 (современный, async/await):
// Получение продуктов
let products = try await Product.products(for: ["premium_monthly"])
guard let subscription = products.first else { return }
// Совершение покупки
let result = try await subscription.purchase()
switch result {
case .success(let verification):
// Проверка верификации транзакции
if case .verified(let transaction) = verification {
await transaction.finish()
// Разблокировать контент
}
case .pending:
// Ожидание (редкий случай)
case .userCancelled:
// Пользователь отменил
@unknown default:
break
}
2. RevenueCat: Использовал для абстракции над StoreKit, управления подписчиками, восстановления покупок и аналитики.
Ключевые аспекты:
- Верификация: Проверка активной подписки через
Purchases.shared.customerInfo().activeSubscriptions(RevenueCat) илиTransaction.currentEntitlements(StoreKit 2). - Восстановление: Вызов
Purchases.shared.restorePurchases()или использованиеTransaction.updates. - Тестирование: Использование Sandbox-окружения и StoreKit Configuration файлов в Xcode для симуляции покупок.