Перейти к содержанию
Innovialabs

Как внедрить встроенные покупки и подписки в приложение

Практика3 мин

Коротко

Заведите продукты в App Store Connect и Play Console, проводите покупки через StoreKit и Google Play Billing, проверяйте их и храните статус доступа на своём сервере, а пробные периоды и восстановление покупок настройте по правилам каждого магазина или через RevenueCat.

Коротко: из чего состоят покупки в приложении

Встроенные покупки (in-app purchases, IAP) — это продажа цифрового контента и функций через платёжную систему магазина. Работающая схема включает:

  1. Продукты в App Store Connect и Google Play Console.
  2. Клиентский код на StoreKit (iOS) и Google Play Billing Library (Android).
  3. Сервер, который проверяет покупки и хранит, у кого какой доступ.
  4. Уведомления от магазинов о продлениях, отменах и возвратах.

Типы продуктов

AppleGoogle PlayПример
ConsumableОдноразовый расходуемыйМонеты, кредиты
Non-consumableОдноразовый нерасходуемыйОтключение рекламы навсегда
Auto-renewable subscriptionSubscription (base plan + offers)Премиум на месяц или год
Non-renewing subscription— (реализуется отдельно)Доступ к сезону курса

В Google Play подписка состоит из base plan (период и цена) и offers (скидки и пробные периоды). У Apple подписки объединяются в subscription group: пользователь может иметь только одну активную подписку из группы.

iOS: StoreKit

Современный StoreKit 2 работает на async/await и возвращает подписанные транзакции:

let products = try await Product.products(for: ["premium_monthly"])
if let product = products.first {
    let result = try await product.purchase()
    if case .success(let verification) = result,
       case .verified(let transaction) = verification {
        // выдайте доступ и сообщите серверу
        await transaction.finish()
    }
}
  • Слушайте Transaction.updates с запуска приложения — покупки могут завершиться вне текущей сессии.
  • Для локальной отладки используйте StoreKit Configuration File в Xcode, затем Sandbox-аккаунты.

Android: Google Play Billing

  • Подключите Google Play Billing Library и установите BillingClient.
  • Загрузите продукты через queryProductDetailsAsync, запустите покупку через launchBillingFlow.
  • Подтвердите покупку (acknowledge) или израсходуйте её (consume). Неподтверждённые покупки Google автоматически возвращает через несколько дней.
  • Тестируйте через лицензионных тестировщиков в Play Console.

Серверная проверка

Клиенту доверять нельзя: доступ выдаёт сервер.

  • Apple: проверяйте транзакции через App Store Server API и принимайте App Store Server Notifications о продлениях, отменах и возвратах.
  • Google: проверяйте токен покупки через Google Play Developer API и подпишитесь на Real-time developer notifications через Cloud Pub/Sub.
  • Храните в базе статус подписки, дату окончания и идентификатор оригинальной транзакции, привязанные к аккаунту пользователя.

Пробные периоды

  • Apple: introductory offers — бесплатный пробный период, оплата по сниженной цене за каждый период или разовой суммой. Право на introductory offer обычно одно на subscription group.
  • Google: пробный период и скидка задаются как offer внутри base plan, с правилами, кто имеет на него право.
  • Показывайте на экране оплаты, когда начнётся списание и какая будет цена после пробного периода. Скрытые условия — частая причина отказа на ревью.

Восстановление покупок

  • Apple требует кнопку Restore Purchases для нерасходуемых покупок и подписок. В StoreKit 2 для этого есть AppStore.sync() и Transaction.currentEntitlements.
  • В Android используйте queryPurchasesAsync при запуске, чтобы подтянуть активные покупки.
  • Если у вас есть свои аккаунты, привязывайте покупки к ним — тогда доступ сохранится и на новом устройстве.

Когда брать RevenueCat и аналоги

RevenueCat, Adapty, Qonversion берут на себя серверную проверку, вебхуки, единый статус доступа для iOS и Android и аналитику подписок.

  • Подходит, если нужно быстро запуститься и нет ресурсов на свой бэкенд для подписок.
  • Свой сервер, если важен полный контроль над данными и логикой или уже есть развитый биллинг.

У таких сервисов своя модель оплаты — сравните её с затратами на собственную разработку и поддержку.

Частые вопросы

Как правило, нет: для цифрового контента внутри приложения магазины требуют свои системы оплаты. Исключения зависят от категории приложения и региона и регулярно меняются — сверяйтесь с актуальными правилами.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.