Включение покупок в вашем кастомном пейволе в 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. Получите продукты
Чтобы получить продукты для вашего кастомного пейвола, нужно:
- Получить объект
flow, передав ID плейсмента в методgetFlow. - Получить массив продуктов для этого флоу с помощью метода
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 в нашем примере приложения — там показана обработка покупок с корректной обработкой ошибок и управлением состоянием.