Чтобы включить встроенные покупки, нужно разобраться в трёх ключевых концепциях:
Продукты – всё, что пользователи могут купить (подписки, расходуемые покупки, пожизненный доступ)
Флоу – последовательности экранов, которые показывают продукты пользователям, созданные в 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 сам обработает покупки: Показать представление в вашем приложении.
Обработать действия кнопок: Связать взаимодействия пользователя с реакцией приложения на них. Например, открывать ссылки или закрывать флоу при нажатии кнопок.
Ваши флоу привязаны к плейсментам, настроенным в дашборде. Плейсменты позволяют показывать разные флоу разным аудиториям или запускать 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 при отображении флоу также нужно обрабатывать события. didFinishPurchase, didFailPurchase, didFinishRestore, didFailRestore и didReceiveError обязательны. При тестировании можно просто скопировать код из фрагмента ниже, чтобы логировать эти события.
Флоу не закрывается автоматически после успешной покупки. В didFinishPurchase установите привязку отображения в false, чтобы закрыть его, или ничего не делайте, чтобы флоу перешёл к следующим экранам.
.flow( isPresented: $flowPresented, flowConfiguration: flowConfiguration, didFinishPurchase: { product, purchaseResult in print("Purchase finished successfully") flowPresented = false // or do nothing to let the flow continue }, didFailPurchase: { product, error in print("Purchase failed: \(error)") }, didFinishRestore: { profile in print("Restore finished successfully") }, didFailRestore: { error in print("Restore failed: \(error)") }, didReceiveError: { error in flowPresented = false print("Flow error: \(error)") })
Реализуйте AdaptyFlowControllerDelegate для обработки событий. Как минимум, реализуйте четыре метода, у которых нет реализации по умолчанию. Обратите внимание: контроллер не закрывается сам после успешной покупки — закройте его в didFinishPurchase или ничего не делайте, чтобы флоу перешёл к следующим экранам:
Подробнее о том, как отобразить флоу, см. наш гайд.
3. Обработка действий кнопок
Когда пользователи нажимают кнопки, iOS SDK автоматически обрабатывает покупки, восстановление, закрытие флоу и переходы по ссылкам.
Однако у других кнопок есть пользовательские или заранее заданные идентификаторы, и обработку их действий нужно реализовывать в коде. Кроме того, вы можете переопределить их поведение по умолчанию.
Например, вот как обрабатывать кнопку закрытия. В UIKit SDK автоматически закрывает контроллер, когда срабатывает .close — переопределяйте это только если нужно нестандартное поведение. В SwiftUI вам нужно самостоятельно установить привязку isPresented в false.
Читайте наши гайды о том, как обрабатывать действия кнопок и события.
.flow( isPresented: $flowPresented, flowConfiguration: flowConfiguration, didPerformAction: { action in switch action { case .close: flowPresented = false // dismiss the flow when the user taps close default: break } }, didFinishPurchase: { product, purchaseResult in flowPresented = false }, didFailPurchase: { product, error in /* handle the error */ }, didFinishRestore: { profile in /* check access level and dismiss */ }, didFailRestore: { error in /* handle the error */ }, didReceiveError: { error in flowPresented = false })
Есть вопросы или возникли проблемы? Загляните на наш форум поддержки, где можно найти ответы на распространённые вопросы или задать свой. Наша команда и сообщество всегда готовы помочь!