Чтобы включить встроенные покупки, нужно разобраться в трёх ключевых концепциях:
Продукты – всё, что пользователи могут купить (подписки, расходуемые покупки, пожизненный доступ)
Флоу – последовательности экранов, которые показывают продукты пользователям, созданные в no-code Flow Builder. SDK получает их через getFlow. Если вы предпочитаете строить UI в собственном коде, используйте пейвол — см. Реализация пейволов вручную.
Плейсменты – где и когда в приложении показываются флоу (например, main, onboarding, settings). Вы привязываете флоу к плейсментам в дашборде, а затем запрашиваете их по ID плейсмента в коде. Это упрощает проведение A/B-тестов и показ разных флоу разным пользователям.
Adapty предлагает три способа подключить покупки в вашем приложении. Выберите подходящий в зависимости от требований:
| Реализация | Сложность | Когда использовать |
|---|---|---|
| Adapty Flow Builder | ✅ Легко | Вы создаёте полноценный флоу, готовый к покупкам, в no-code конструкторе. Adapty автоматически его отображает и берёт на себя весь процесс покупки, валидацию чеков и управление подписками. |
| Пейволы, созданные вручную | 🟡 Средне | Вы реализуете UI пейвола в коде приложения, но всё равно получаете объект флоу от Adapty, сохраняя гибкость в управлении продуктами. См. гайд. |
| Observer mode | 🔴 Сложно | У вас уже есть собственная инфраструктура обработки покупок, и вы хотите продолжать ею пользоваться. Обратите внимание, что observer mode имеет ряд ограничений в Adapty. См. статью. |
Шаги ниже показывают, как реализовать флоу, созданный в Adapty Flow Builder.
Чтобы отобразить флоу, созданный в Adapty Flow Builder, в коде вашего приложения нужно всего лишь:
Получить флоу: Запросить его из Adapty.
Отобразить его — Adapty сам обработает покупки: Показать представление в вашем приложении.
Обработать действия кнопок: Связать взаимодействия пользователя с реакцией приложения на них. Например, открывать ссылки или закрывать флоу при нажатии кнопок.
Самый быстрый способ выполнить эти шаги — следовать quickstart-гайду или создать пейволы и плейсменты с помощью Developer CLI.
1. Получите флоу
Ваши флоу привязаны к плейсментам, настроенным в дашборде. Плейсменты позволяют показывать разные флоу разным аудиториям или запускать A/B-тесты.
Чтобы получить флоу, созданный в Adapty Flow Builder, нужно:
Получить объект flow по ID плейсмента с помощью метода getFlow и проверить, есть ли в нём конфигурация представления.
Получить конфигурацию представления с помощью метода getFlowConfiguration. Она содержит элементы UI и стили, необходимые для отображения флоу.
func loadFlow() async { let flow = try await Adapty.getFlow(placementId: "YOUR_PLACEMENT_ID") guard flow.hasViewConfiguration else { print("Flow doesn't have a view configuration") return } flowConfiguration = try await AdaptyUI.getFlowConfiguration(forFlow: flow)}
2. Отображение флоу
Теперь, когда у вас есть конфигурация флоу, достаточно добавить несколько строк кода для его отображения.
В SwiftUI при отображении флоу также необходимо обрабатывать события. didFailPurchase, didFinishRestore, didFailRestore и didReceiveError — обязательны. При тестировании можно просто скопировать код из фрагмента ниже, чтобы логировать эти события.
Обработка didFinishPurchase не обязательна, но пригодится, если нужно выполнить какие-то действия после успешной покупки. Если вы не реализуете этот колбэк, флоу закроется автоматически.
Реализуйте AdaptyFlowControllerDelegate для обработки событий. Как минимум реализуйте обязательные обработчики ошибок (три метода без реализации по умолчанию):
Подробнее о том, как отобразить флоу, см. наш гайд.
3. Обработка действий кнопок
Когда пользователи нажимают кнопки, iOS SDK автоматически обрабатывает покупки, восстановление, закрытие флоу и переходы по ссылкам.
Однако у других кнопок есть пользовательские или заранее заданные идентификаторы, и обработку их действий нужно реализовывать в коде. Кроме того, вы можете переопределить их поведение по умолчанию.
Например, вот как обрабатывать кнопку закрытия. В UIKit SDK автоматически закрывает контроллер, когда срабатывает .close — переопределяйте это только если нужно нестандартное поведение. В SwiftUI вам нужно самостоятельно установить привязку isPresented в false.
Читайте наши гайды о том, как обрабатывать действия кнопок и события.
.flow( isPresented: $flowPresented, flowConfiguration: flowConfiguration, didPerformAction: { action in switch action { case .close: flowPresented = false // закрываем флоу, когда пользователь нажимает «Закрыть» default: break } }, didFailPurchase: { product, error in /* обработка ошибки */ }, didFinishRestore: { profile in /* проверяем уровень доступа и закрываем */ }, didFailRestore: { error in /* обработка ошибки */ }, didReceiveError: { error in flowPresented = false })
Есть вопросы или возникли проблемы? Загляните на наш форум поддержки, где можно найти ответы на распространённые вопросы или задать свой. Наша команда и сообщество всегда готовы помочь!