Подключение покупок в кастомном пейволе во Flutter SDK
Это руководство описывает, как интегрировать Adapty в кастомные пейволы. Сохраняйте полный контроль над реализацией пейвола, пока SDK Adapty получает продукты, обрабатывает новые покупки и восстанавливает предыдущие. Руководство использует API Adapty Flutter SDK v4 — если вы используете v3, см. гайд по миграции с соответствующими именами методов.
Это руководство предназначено для разработчиков, реализующих кастомные пейволы. Если вы хотите подключить покупки максимально просто, используйте Adapty Paywall Builder. С Paywall Builder вы создаёте пейволы в визуальном редакторе без кода, Adapty берёт на себя всю логику покупок, а тестировать разные дизайны можно без переpublikации приложения.
Прежде чем начать
Настройка продуктов
Чтобы подключить встроенные покупки, нужно разобраться с тремя ключевыми понятиями:
- Продукты – всё, что пользователи могут купить (подписки, расходуемые покупки, пожизненный доступ)
- Пейволы – конфигурации, определяющие, какие продукты предлагать. В Adapty пейволы — единственный способ получить продукты, но такой подход позволяет изменять продукты, цены и офферы без обновления кода приложения. В SDK v4 варианты пейвола для плейсмента передаются через объект flow — вы получаете флоу и запрашиваете из него продукты.
- Плейсменты – где и когда показывать пейволы в приложении (например,
main,onboarding,settings). Вы настраиваете пейволы для плейсментов в дашборде, а затем запрашиваете их по ID плейсмента в коде. Это упрощает проведение A/B-тестов и показ разных пейволов разным пользователям. Убедитесь, что вы понимаете эти концепции, даже если используете собственный пейвол. По сути, это просто способ управлять продуктами, которые вы продаёте в приложении.
Чтобы реализовать собственный пейвол, нужно создать пейвол и добавить его в плейсмент. Такая настройка позволяет получать ваши продукты. Чтобы разобраться, что нужно сделать в дашборде, воспользуйтесь гайдом по быстрому старту здесь.
Управление пользователями
Вы можете работать как с серверной аутентификацией, так и без неё.
При этом Adapty SDK по-разному обрабатывает анонимных и идентифицированных пользователей. Прочитайте гайд по быстрому старту с идентификацией, чтобы разобраться в деталях и убедиться, что вы правильно работаете с пользователями.
Шаг 1. Получение продуктов
Чтобы получить продукты для вашего кастомного пейвола, нужно:
- Получить объект
flow, передав ID плейсмента в методgetFlow. - Получить массив продуктов для этого флоу с помощью метода
getPaywallProducts.
Future<void> loadPaywall() async {
try {
final flow = await Adapty().getFlow(placementId: 'YOUR_PLACEMENT_ID');
final products = await Adapty().getPaywallProducts(flow: flow);
// Use products to build your custom paywall UI
} on AdaptyError catch (adaptyError) {
// Handle the error
} catch (e) {
// Handle the error
}
}
Шаг 2. Принятие покупок
Когда пользователь нажимает на продукт в вашем кастомном пейволе, вызовите метод makePurchase с выбранным продуктом. Это запустит флоу покупки и вернёт обновлённый профиль.
Future<void> purchaseProduct(AdaptyPaywallProduct product) async {
try {
final purchaseResult = await Adapty().makePurchase(product: product);
switch (purchaseResult) {
case AdaptyPurchaseResultSuccess(profile: final profile):
// Purchase successful, profile updated
break;
case AdaptyPurchaseResultUserCancelled():
// User canceled the purchase
break;
case AdaptyPurchaseResultPending():
// Purchase is pending (e.g., user will pay offline with cash)
break;
}
} on AdaptyError catch (adaptyError) {
// Handle the error
} catch (e) {
// Handle the error
}
}
Шаг 3. Восстановление покупок
Сторы требуют, чтобы все приложения с подписками предоставляли пользователям возможность восстановить покупки.
Вызывайте метод restorePurchases, когда пользователь нажимает кнопку восстановления. Это синхронизирует историю покупок с Adapty и вернёт обновлённый профиль.
Future<void> restorePurchases() async {
try {
final profile = await Adapty().restorePurchases();
// Restore successful, profile updated
} on AdaptyError catch (adaptyError) {
// Handle the error
} catch (e) {
// Handle the error
}
}
Шаг 4. Проверьте статус подписки
После покупки или восстановления проверьте уровень доступа пользователя, чтобы решить, показывать пейвол или открывать платные функции. Методы makePurchase и restorePurchases уже возвращают обновлённый профиль; когда нужно получить текущий статус в другом месте приложения, используйте метод getProfile:
Future<bool> hasPremiumAccess() async {
try {
final profile = await Adapty().getProfile();
return profile.accessLevels['premium']?.isActive ?? false;
} on AdaptyError catch (adaptyError) {
// Handle the error
} catch (e) {
// Handle the error
}
return false;
}
Другие способы проверки и отслеживания статуса подписки, включая получение обновлений в реальном времени, описаны в разделе Проверка статуса подписки.
Следующие шаги
Есть вопросы или возникли проблемы? Загляните на наш форум поддержки, где можно найти ответы на распространённые вопросы или задать свой. Наша команда и сообщество всегда готовы помочь!
Ваш пейвол готов к отображению в приложении. Протестируйте покупки в песочнице App Store или в Google Play Store, чтобы убедиться, что вы можете совершить тестовую покупку через пейвол. Чтобы увидеть, как это работает в production-реализации, ознакомьтесь с PurchasesObserver в нашем примере приложения — там показана обработка покупок с корректной обработкой ошибок, наблюдателями UI и полноценной интеграцией SDK.