Включение покупок в вашем кастомном пейволе в Kotlin Multiplatform SDK

В этом гайде описано, как интегрировать Adapty в ваши кастомные пейволы. Сохраняйте полный контроль над реализацией пейвола, пока Adapty SDK получает продукты, обрабатывает новые покупки и восстанавливает предыдущие. В этом гайде используются API Adapty Kotlin Multiplatform SDK v4 (beta) — если вы используете v3, смотрите руководство по миграции с соответствующими названиями методов.

Это руководство для разработчиков, которые реализуют пользовательские пейволы. Если вы хотите самый простой способ подключить покупки, используйте Adapty Flow Builder. С Flow Builder вы создаёте флоу в визуальном редакторе без кода, Adapty автоматически обрабатывает всю логику покупок, а вы можете тестировать разные дизайны без повторной публикации приложения.

Прежде чем начать

Настройка продуктов

Чтобы подключить встроенные покупки, нужно разобраться с тремя ключевыми понятиями:

  • Продукты – всё, что пользователи могут купить (подписки, расходуемые покупки, пожизненный доступ)
  • Пейволы – конфигурации, определяющие, какие продукты предлагать. В Adapty пейволы — единственный способ получить продукты, но такой подход позволяет изменять продукты, цены и офферы без обновления кода приложения. В SDK v4 варианты пейволов для плейсмента передаются через объект flow — вы получаете флоу и запрашиваете его продукты.
  • Плейсменты – где и когда показывать пейволы в приложении (например, main, onboarding, settings). Пейволы для плейсментов настраиваются в дашборде, а затем запрашиваются по ID плейсмента в коде. Это упрощает проведение A/B-тестов и показ разных пейволов разным пользователям.

Убедитесь, что вы понимаете эти концепции, даже если используете собственный пейвол. По сути, это просто способ управлять продуктами, которые вы продаёте в приложении.

Чтобы реализовать собственный пейвол, нужно создать пейвол и добавить его в плейсмент. Это позволит получать ваши продукты. Чтобы разобраться, что именно нужно сделать в дашборде, следуйте этому руководству по быстрому старту.

Управление пользователями

Вы можете работать как с бэкенд-аутентификацией, так и без неё.

При этом SDK по-разному обрабатывает анонимных и идентифицированных пользователей. Прочитайте гайд по идентификации пользователей, чтобы разобраться в деталях и правильно работать с пользователями.

Шаг 1. Получите продукты

Чтобы получить продукты для вашего кастомного пейвола, нужно:

  1. Получить объект flow, передав ID плейсмента в метод getFlow.
  2. Получить массив продуктов для этого флоу с помощью метода getPaywallProducts.

fun loadPaywall() {
    Adapty.getFlow(placementId = "YOUR_PLACEMENT_ID")
        .onSuccess { flow ->
            Adapty.getPaywallProducts(flow = flow)
                .onSuccess { products ->
                    // Use products to build your custom paywall UI
                }
                .onError { error ->
                    // Handle the error
                }
        }
        .onError { error ->
            // Handle the error
        }
}

Шаг 2. Принимайте покупки

Когда пользователь нажимает на продукт в вашем кастомном пейволе, вызовите метод makePurchase с выбранным продуктом. Это запустит флоу покупки и вернёт обновлённый профиль.


fun purchaseProduct(product: AdaptyPaywallProduct) {
    Adapty.makePurchase(product = product)
        .onSuccess { purchaseResult ->
            when (purchaseResult) {
                is AdaptyPurchaseResult.Success -> {
                    val profile = purchaseResult.profile
                    // Purchase successful, profile updated
                }
                is AdaptyPurchaseResult.UserCanceled -> {
                    // User canceled the purchase
                }
                is AdaptyPurchaseResult.Pending -> {
                    // Purchase is pending (e.g., user will pay offline with cash)
                }
            }
        }
        .onError { error ->
            // Handle the error
        }
}

Шаг 3. Восстановление покупок

Сторы требуют, чтобы все приложения с подписками предоставляли пользователям возможность восстановить покупки.

Вызывайте метод restorePurchases, когда пользователь нажимает кнопку восстановления. Это синхронизирует историю покупок с Adapty и вернёт обновлённый профиль.


fun restorePurchases() {
    Adapty.restorePurchases()
        .onSuccess { profile ->
            // Restore successful, profile updated
        }
        .onError { error ->
            // Handle the error
        }
}

Шаг 4. Проверьте статус подписки

После покупки или восстановления проверьте уровень доступа пользователя, чтобы решить — показывать пейвол или открыть платные функции. Методы makePurchase и restorePurchases уже возвращают обновлённый профиль; когда нужно получить текущий статус в другом месте приложения, используйте метод getProfile:


fun checkPremiumAccess() {
    Adapty.getProfile()
        .onSuccess { profile ->
            val hasPremiumAccess = profile.accessLevels["premium"]?.isActive == true
            // Grant access to paid features if hasPremiumAccess is true
        }
        .onError { error ->
            // Handle the error
        }
}

Подробнее о способах проверки и мониторинга статуса подписки, включая прослушивание обновлений в реальном времени, см. в разделе Проверка статуса подписки.

Следующие шаги

Есть вопросы или возникли проблемы? Загляните на наш форум поддержки, где можно найти ответы на распространённые вопросы или задать свой. Наша команда и сообщество всегда готовы помочь!

Ваш пейвол готов к отображению в приложении. Протестируйте покупки в песочнице App Store или в Google Play Store, чтобы убедиться, что тестовая покупка с пейвола проходит успешно. Чтобы увидеть, как это работает в production-ready реализации, посмотрите на AppViewModel.kt в нашем примере приложения — там показана обработка покупок с корректной обработкой ошибок и управлением состоянием.