Какой у вас опыт реализации подписок (In-App Purchases) в iOS?

«Какой у вас опыт реализации подписок (In-App Purchases) в iOS?» — вопрос из категории Other, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Есть опыт реализации подписок с использованием нативного 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 для симуляции покупок.