Отображение пейволов Paywall Builder в режиме Observer в iOS SDK
Если вы настроили пейвол с помощью Paywall Builder, вам не нужно беспокоиться о его отображении в коде мобильного приложения — всё уже настроено. Такой пейвол содержит как то, что должно отображаться, так и то, как именно это должно выглядеть.
Этот раздел относится только к режиму Observer. Если вы не работаете в режиме Observer, обратитесь к разделу iOS — показ пейволов, созданных в Paywall Builder.
Перед тем как начать показывать флоу (нажмите, чтобы развернуть)
- Настройте начальную интеграцию Adapty с App Store.
2. Установите и настройте SDK. Убедитесь, что параметр
observerModeустановлен вtrue. Обратитесь к руководству по установке iOS SDK. 3. Создайте продукты в дашборде Adapty. 4. Настройте флоу или пейволы в билдерах и привяжите к ним продукты. 5. Создайте плейсменты и назначьте на них флоу или пейволы. 6. Получите флоу и их конфигурацию в коде мобильного приложения.
- Реализуйте объект
AdaptyObserverModeResolver. Протокол тот же, что и в SDK v3 — observer mode не меняется между флоу и пейволом:
func observerMode(didInitiatePurchase product: AdaptyPaywallProduct,
onStartPurchase: @escaping () -> Void,
onFinishPurchase: @escaping () -> Void) {
// используйте объект product для обработки покупки
// вызовите onStartPurchase / onFinishPurchase, чтобы уведомить AdaptyUI о прогрессе покупки
}
Это фрагмент MDX-документа без frontmatter. Вот его перевод:
---
func observerModeDidInitiateRestorePurchases(onStartRestore: @escaping () -> Void,
onFinishRestore: @escaping () -> Void) {
// call onStartRestore / onFinishRestore to notify AdaptyUI about the restore progress
}- Создайте объект конфигурации флоу, передав ваш резолвер в качестве параметра
observerModeResolver::
do {
let flowConfiguration = try await AdaptyUI.getFlowConfiguration(
forFlow: flow,
observerModeResolver: <AdaptyObserverModeResolver>
)
} catch {
// handle the error
}Параметры запроса:
| Параметр | Наличие | Описание |
|---|---|---|
| forFlow | обязательный | Объект AdaptyFlow, полученный через Adapty.getFlow(placementId:). См. Получение флоу и пейволов. |
| observerModeResolver | обязательный | Реализованный вами AdaptyObserverModeResolver. |
-
Инициализируйте контроллер флоу с помощью
AdaptyUI.flowController(with:delegate:):import AdaptyUI let visualFlow = try AdaptyUI.flowController( with: flowConfiguration, delegate: <AdaptyFlowControllerDelegate> )Параметры запроса:
Параметр Наличие Описание flowConfiguration обязательный Объект AdaptyUI.FlowConfiguration, содержащий визуальные детали флоу. См. Получение флоу и пейволов.delegate обязательный AdaptyFlowControllerDelegateдля прослушивания событий флоу. См. Обработка событий флоу и пейвола.
Возвращает:
| Объект | Описание |
|---|---|
| AdaptyFlowController | Объект, представляющий запрошенный экран флоу. |
-
Отобразите контроллер:
present(visualFlow, animated: true)
Не забудьте связать пейволы с транзакциями покупок. Иначе Adapty не сможет определить, с какого пейвола была совершена покупка.
В SwiftUI получите конфигурацию флоу с помощью резолвера и передайте её в модификатор .flow:
@State var flowPresented = false
@State var flowConfiguration: AdaptyUI.FlowConfiguration?
var body: some View {
Text("Hello, AdaptyUI!")
.flow(
isPresented: $flowPresented,
flowConfiguration: flowConfiguration,
didPerformAction: { action in
switch action {
case .close:
flowPresented = false
default:
break
}
},
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 }
)
.task {
flowConfiguration = try? await AdaptyUI.getFlowConfiguration(
forFlow: flow,
observerModeResolver: <AdaptyObserverModeResolver>
)
}
}Параметр observerModeResolver: в getFlowConfiguration — это то, что заставляет отрендеренный флоу использовать вашу собственную логику покупок; сам модификатор использует те же колбэки, что и полный режим.
Не забудьте привязать пейволы к транзакциям покупок. Иначе Adapty не сможет определить, с какого пейвола была совершена покупка.
Прежде чем показывать пейволы (нажмите, чтобы развернуть)
- Настройте начальную интеграцию Adapty с Google Play и с App Store.
2. Установите и настройте Adapty SDK. Убедитесь, что параметр
observerModeустановлен вtrue. Обратитесь к нашим инструкциям для конкретных фреймворков: iOS. 3. Создайте продукты в дашборде Adapty. 4. Настройте пейволы, назначьте на них продукты и кастомизируйте их с помощью Paywall Builder в дашборде Adapty. 5. Создайте плейсменты и назначьте на них пейволы в дашборде Adapty. 6. Получите пейволы Paywall Builder и их конфигурацию в коде мобильного приложения.
-
Реализуйте объект
AdaptyObserverModeResolver:func observerMode(didInitiatePurchase product: AdaptyPaywallProduct, onStartPurchase: @escaping () -> Void, onFinishPurchase: @escaping () -> Void) { // use the product object to handle the purchase // use the onStartPurchase and onFinishPurchase callbacks to notify AdaptyUI about the process of the purchase }
Событие observerMode(didInitiatePurchase:onStartPurchase:onFinishPurchase:) уведомит вас о том, что пользователь инициировал покупку. В ответ на этот колбэк вы можете запустить собственный процесс покупки.
observerModeDidInitiateRestorePurchases(onStartRestore:onFinishRestore:) уведомит вас о том, что пользователь инициировал восстановление покупок. В ответ на этот колбэк вы можете запустить собственный процесс восстановления.
Также не забудьте вызвать следующие колбэки, чтобы уведомить AdaptyUI о ходе покупки или восстановления. Это необходимо для корректного поведения пейвола — например, для отображения загрузчика:
| Callback | Описание |
|---|---|
| onStartPurchase() | Колбэк следует вызывать, чтобы уведомить AdaptyUI о начале покупки. |
| onFinishPurchase() | Колбэк следует вызывать, чтобы уведомить AdaptyUI о завершении покупки. |
| onStartRestore() | Колбэк следует вызывать, чтобы уведомить AdaptyUI о начале восстановления покупок. |
| onFinishRestore() | Колбэк следует вызывать, чтобы уведомить AdaptyUI о завершении восстановления покупок. |
-
Создайте объект конфигурации пейвола:
do { let paywallConfiguration = try AdaptyUI.getPaywallConfiguration( forPaywall: <paywall object>, observerModeResolver: <AdaptyObserverModeResolver> ) } catch { // handle the error }Параметры запроса:
Параметр Наличие Описание Paywall обязательный Объект AdaptyPaywallдля получения контроллера нужного пейвола.ObserverModeResolver обязательный Объект AdaptyObserverModeResolver, реализованный на предыдущем шаге. -
Инициализируйте визуальный пейвол, который хотите отобразить, с помощью метода
.paywallController(for:products:viewConfiguration:delegate:):import AdaptyUI let visualPaywall = AdaptyUI.paywallController( with: <paywall configuration object>, delegate: <AdaptyPaywallControllerDelegate> )
Параметры запроса:
| Параметр | Обязательность | Описание |
|---|---|---|
| Paywall Configuration | обязательный | Объект AdaptyUI.PaywallConfiguration, содержащий визуальные детали пейвола. Используйте метод AdaptyUI.getPaywallConfiguration(forPaywall:locale:). Подробнее см. в разделе Получение пейволов Paywall Builder и их конфигурации. |
| Delegate | обязательный | AdaptyPaywallControllerDelegate для прослушивания событий пейвола. Подробнее см. в разделе Обработка событий пейвола. |
| Возвращает: |
| Объект | Описание |
|---|---|
| AdaptyPaywallController | Объект, представляющий запрошенный экран пейвола |
После успешного создания объекта его можно отобразить следующим образом:
present(visualPaywall, animated: true)Не забудьте связать пейволы с транзакциями покупок. Иначе Adapty не сможет определить, из какого пейвола была совершена покупка.
Чтобы отобразить визуальный пейвол на экране устройства, используйте модификатор .paywall в SwiftUI:
@State var paywallPresented = false
var body: some View {
Text("Hello, AdaptyUI!")
.paywall(
isPresented: $paywallPresented,
paywallConfiguration: <paywall configuration object>,
didPerformAction: { action in
switch action {
case .close:
paywallPresented = false
default:
// Handle other actions
break
}
},
didFinishRestore: { profile in /* check access level and dismiss */ },
didFailRestore: { error in /* handle the error */ },
didFailRendering: { error in paywallPresented = false }
)
}Параметры запроса:
| Параметр | Наличие | Описание |
|---|---|---|
| Paywall Configuration | обязательный | Объект AdaptyUI.PaywallConfiguration, содержащий визуальные детали пейвола. Используйте метод AdaptyUI.getPaywallConfiguration(forPaywall:locale:). Подробнее см. в разделе Получение пейволов Paywall Builder и их конфигурации. |
| Products | необязательный | Передайте массив объектов AdaptyPaywallProduct, чтобы оптимизировать время отображения продуктов на экране. Если передать nil, AdaptyUI автоматически загрузит необходимые продукты. |
| TagResolver | необязательный | Задайте словарь пользовательских тегов и их значений. Пользовательские теги используются как плейсхолдеры в контенте пейвола и динамически заменяются конкретными строками для персонализации содержимого. Подробнее см. в разделе о пользовательских тегах в Paywall Builder. |
| ObserverModeResolver | необязательный | Объект AdaptyObserverModeResolver, реализованный на предыдущем шаге. |
| Параметры замыкания: |
| Параметр замыкания | Описание |
|---|---|
| didFinishRestore | Вызывается, если Adapty.restorePurchases() выполнился успешно. |
| didFailRestore | Вызывается, если Adapty.restorePurchases() завершился с ошибкой. |
| didFailRendering | Вызывается, если в процессе отрисовки интерфейса произошла ошибка. |
| Обратитесь к разделу iOS — Обработка событий для ознакомления с другими параметрами замыканий. |
Не забудьте привязать пейволы к транзакциям покупок. Иначе Adapty не сможет определить, с какого пейвола была совершена покупка.
Перед тем как начать показывать пейволы (нажмите, чтобы развернуть)
- Настройте начальную интеграцию Adapty с Google Play и с App Store.
- Установите и настройте Adapty SDK. Убедитесь, что параметр
observerModeустановлен вtrue. Обратитесь к нашим инструкциям для iOS, React Native, Flutter и Unity. - Создайте продукты в дашборде Adapty.
- Настройте пейволы, назначьте на них продукты и кастомизируйте их с помощью Paywall Builder в дашборде Adapty.
- Создайте плейсменты и назначьте пейволы на них в дашборде Adapty.
- Получите пейволы Paywall Builder и их конфигурацию в коде вашего мобильного приложения.
- Реализуйте объект
AdaptyObserverModeDelegate:
func paywallController(_ controller: AdaptyPaywallController,
didInitiatePurchase product: AdaptyPaywallProduct,
onStartPurchase: @escaping () -> Void,
onFinishPurchase: @escaping () -> Void) {
// use the product object to handle the purchase
// use the onStartPurchase and onFinishPurchase callbacks to notify AdaptyUI about the process of the purchase
}paywallController(_:didInitiatePurchase:onStartPurchase:onFinishPurchase:) уведомит вас о том, что пользователь инициировал покупку. В ответ на это событие вы можете запустить свой кастомный флоу покупки.
Также не забудьте вызвать следующие колбэки, чтобы уведомить AdaptyUI о процессе покупки. Это необходимо для корректного поведения пейвола — например, для отображения лоадера:
| Колбэк | Описание |
|---|---|
| onStartPurchase | Колбэк вызывается, чтобы уведомить AdaptyUI о начале покупки. |
| onFinishPurchase | Колбэк вызывается, чтобы уведомить AdaptyUI о завершении покупки. |
- Инициализируйте визуальный пейвол, который хотите отобразить, с помощью метода
.paywallController(for:products:viewConfiguration:delegate:observerModeDelegate:):
import AdaptyUI
let visualPaywall = AdaptyUI.paywallController(
for: <paywall object>,
products: <paywall products array>,
viewConfiguration: <LocalizedViewConfiguration>,
delegate: <AdaptyPaywallControllerDelegate>
observerModeDelegate: <AdaptyObserverModeDelegate>
)Параметры запроса:
| Параметр | Наличие | Описание |
|---|---|---|
| Paywall | обязательный | Объект AdaptyPaywall для получения контроллера нужного пейвола. |
| Products | необязательный | Передайте массив объектов AdaptyPaywallProduct, чтобы оптимизировать время отображения продуктов на экране. Если передать nil, AdaptyUI автоматически загрузит необходимые продукты. |
| ViewConfiguration | обязательный | Объект AdaptyUI.LocalizedViewConfiguration, содержащий визуальные настройки пейвола. Используйте метод AdaptyUI.getViewConfiguration(paywall:locale:). Подробнее см. в разделе Получение пейволов Paywall Builder и их конфигурации. |
| Delegate | обязательный | AdaptyPaywallControllerDelegate для обработки событий пейвола. Подробнее см. в разделе Обработка событий пейвола. |
| ObserverModeDelegate | обязательный | Объект AdaptyObserverModeDelegate, реализованный на предыдущем шаге. |
| TagResolver | необязательный | Задайте словарь пользовательских тегов и их значений. Кастомные теги служат плейсхолдерами в контенте пейвола и динамически заменяются конкретными строками для персонализации. Подробнее см. в разделе «Кастомные теги в Paywall Builder». |
| Возвращает: |
| Объект | Описание |
|---|---|
| AdaptyPaywallController | Объект, представляющий запрошенный экран пейвола |
После успешного создания объекта его можно отобразить следующим образом:
present(visualPaywall, animated: true)Не забудьте связать пейволы с транзакциями покупок. Иначе Adapty не сможет определить, из какого пейвола была совершена покупка.
Чтобы отобразить визуальный пейвол на экране устройства, используйте модификатор .paywall в SwiftUI:
@State var paywallPresented = false
var body: some View {
Text("Hello, AdaptyUI!")
.paywall(
isPresented: $paywallPresented,
paywall: <paywall object>,
configuration: <LocalizedViewConfiguration>,
didPerformAction: { action in
switch action {
case .close:
paywallPresented = false
default:
// Handle other actions
break
}
},
didFinishRestore: { profile in /* check access level and dismiss */ },
didFailRestore: { error in /* handle the error */ },
didFailRendering: { error in paywallPresented = false },
observerModeDidInitiatePurchase: { product, onStartPurchase, onFinishPurchase in
// use the product object to handle the purchase
// use the onStartPurchase and onFinishPurchase callbacks to notify AdaptyUI about the process of the purchase
},
)
}Параметры запроса:
| Параметр | Обязательность | Описание |
|---|---|---|
| Paywall | обязательный | Объект AdaptyPaywall для получения контроллера нужного пейвола. |
| Product | необязательный | Передайте массив объектов AdaptyPaywallProduct, чтобы оптимизировать время отображения продуктов на экране. Если передать nil, AdaptyUI автоматически загрузит необходимые продукты. |
| Configuration | обязательный | Объект AdaptyUI.LocalizedViewConfiguration, содержащий визуальные настройки пейвола. Используйте метод AdaptyUI.getViewConfiguration(paywall:locale:). Подробнее см. в разделе Получение пейволов Paywall Builder и их конфигурации. |
| TagResolver | необязательный | Задайте словарь пользовательских тегов и их значений. Пользовательские теги служат плейсхолдерами в содержимом пейвола и динамически заменяются конкретными строками для персонализации контента. Подробнее см. в разделе Custom tags in paywall builder. |
| Параметры замыкания: | ||
| Параметр closure | Описание | |
| :---------------------------------- | :------------------------------------------------------------------------------------------------ | |
| didFinishRestore | Вызывается, если Adapty.restorePurchases() завершился успешно. | |
| didFailRestore | Вызывается, если Adapty.restorePurchases() завершился с ошибкой. | |
| didFailRendering | Вызывается, если в процессе отрисовки интерфейса произошла ошибка. | |
| observerModeDidInitiatePurchase | Вызывается, когда пользователь инициирует покупку. | |
| Обратитесь к разделу iOS — Обработка событий для ознакомления с другими параметрами замыкания. |
Не забудьте связать пейволы с транзакциями покупок. В противном случае Adapty не сможет определить, из какого пейвола была совершена покупка.