在 iOS SDK 的观察者模式下展示付费墙编辑工具付费墙
如果您已使用付费墙编辑工具自定义了付费墙,则无需在移动应用代码中额外编写渲染逻辑来向用户展示它。此类付费墙已包含展示内容与展示方式的完整定义。
本节仅适用于观察者模式。如果您不使用观察者模式,请参阅 iOS - 展示付费墙编辑工具付费墙。
开始展示流程前的准备工作(点击展开)
- 在 Adapty 中完成与 App Store 的初始集成。
2. 安装并配置 Adapty SDK,确保将
observerMode参数设置为true。请参阅 iOS SDK 安装指南。 3. 在 Adapty 看板中创建产品。 4. 在编辑工具中配置流程或付费墙,并为其分配产品。 5. 创建版位并将流程或付费墙分配给对应版位。 6. 在移动应用代码中获取流程及其配置。
-
实现
AdaptyObserverModeResolver对象。该协议与 SDK v3 中相同——观察者模式本身在 flow 和付费墙渲染之间不会发生变化:func observerMode(didInitiatePurchase product: AdaptyPaywallProduct, onStartPurchase: @escaping () -> Void, onFinishPurchase: @escaping () -> Void) { // use the product object to handle the purchase // call onStartPurchase / onFinishPurchase to notify AdaptyUI about the purchase progress } 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 必填 通过 Adapty.getFlow(placementId:)获取的AdaptyFlow对象。详见获取流程和付费墙。observerModeResolver 必填 您在上方实现的 AdaptyObserverModeResolver。 -
使用
AdaptyUI.flowController(with:delegate:)初始化流程控制器:import AdaptyUI let visualFlow = try AdaptyUI.flowController( with: flowConfiguration, delegate: <AdaptyFlowControllerDelegate> )请求参数:
参数 是否必填 描述 flowConfiguration required 一个 AdaptyUI.FlowConfiguration对象,包含流程的视觉详情。参见获取流程和付费墙。delegate required 一个 AdaptyFlowControllerDelegate,用于监听流程事件。参见处理流程和付费墙事件。
返回值:
| 对象 | 描述 |
|---|---|
| AdaptyFlowController | 表示所请求流程界面的对象。 |
-
展示控制器:
present(visualFlow, animated: true)
不要忘记将付费墙与购买交易关联。否则,Adapty 将无法确定购买行为来源的付费墙。
在 SwiftUI 中,使用 resolver 获取流程配置,并将其传递给 .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
}
},
didFinishPurchase: { product, purchaseResult in /* dismiss, or do nothing to let the flow continue */ },
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>
)
}
}getFlowConfiguration 上的 observerModeResolver: 参数让渲染的流程遵循你的自定义购买逻辑——该修改器本身使用与完整模式相同的回调。
别忘了将付费墙关联到购买交易。否则,Adapty 将无法确定购买来源的付费墙。
开始展示付费墙之前(点击展开)
- 在 Adapty 中完成与 Google Play 和 App Store 的初始集成。
2. 安装并配置 Adapty SDK,确保将
observerMode参数设置为true。请参阅针对 iOS 的框架专属说明。 3. 在 Adapty 看板中创建产品。 4. 在 Adapty 看板中配置付费墙、为其分配产品,并使用付费墙编辑工具进行自定义。 5. 在 Adapty 看板中创建版位并为其分配付费墙。 6. 在移动端代码中获取付费墙编辑工具的付费墙及其配置。
- 实现
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 } func observerModeDidInitiateRestorePurchases(onStartRestore: @escaping () -> Void, onFinishRestore: @escaping () -> Void) { // use the onStartRestore and onFinishRestore callbacks to notify AdaptyUI about the process of the restore }
observerMode(didInitiatePurchase:onStartPurchase:onFinishPurchase:) 事件会通知您用户已发起购买。您可以在此回调中触发自定义购买流程。
observerModeDidInitiateRestorePurchases(onStartRestore:onFinishRestore:) 事件会通知您用户已发起恢复购买操作。您可以在此回调中触发自定义恢复流程。
另外,请记得调用以下回调函数,以便将购买或恢复的进度通知 AdaptyUI。这对于正确的付费墙行为(例如显示加载中状态等)是必要的:
| 回调 | 描述 |
|---|---|
| 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:) 方法。详情请参阅获取付费墙编辑工具的付费墙及其配置。 |
| Delegate | 必填 | 用于监听付费墙事件的 AdaptyPaywallControllerDelegate。详情请参阅处理付费墙事件。 |
| 返回值: |
| 对象 | 描述 |
|---|---|
| AdaptyPaywallController | 表示所请求付费墙界面的对象 |
成功创建对象后,可以通过以下方式展示它:
present(visualPaywall, animated: true)别忘了将付费墙与购买交易关联,否则 Adapty 将无法确定购买来源的付费墙。
如需在设备屏幕上展示可视化付费墙,请在 SwiftUI 中使用 .paywall 修饰符:
@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 }
)
}Request parameters:
| 参数 | 是否必填 | 描述 |
|---|---|---|
| Paywall Configuration | 必填 | 一个 AdaptyUI.PaywallConfiguration 对象,包含付费墙的视觉详情。使用 AdaptyUI.getPaywallConfiguration(forPaywall:locale:) 方法。详情请参阅获取付费墙编辑工具的付费墙及其配置。 |
| Products | 可选 | 提供一个 AdaptyPaywallProduct 对象数组,以优化产品在屏幕上的显示时机。如果传入 nil,AdaptyUI 将自动获取所需产品。 |
| TagResolver | 可选 | 定义一个自定义标签及其解析值的字典。自定义标签在付费墙内容中充当占位符,可动态替换为特定字符串,实现付费墙内的个性化内容。详情请参阅付费墙编辑工具中的自定义标签主题。 |
| ObserverModeResolver | 可选 | 你在上一步中实现的 AdaptyObserverModeResolver 对象 |
| 闭包参数: |
| 闭包参数 | 描述 |
|---|---|
| didFinishRestore | 如果 Adapty.restorePurchases() 成功,此回调将被调用。 |
| didFailRestore | 如果 Adapty.restorePurchases() 失败,此回调将被调用。 |
| didFailRendering | 如果界面渲染过程中发生错误,此回调将被调用。 |
| 请参阅 iOS - 处理事件 主题,了解其他闭包参数。 |
不要忘记将付费墙关联到购买交易。否则,Adapty 将无法确定购买来源的付费墙。
Before you start presenting paywalls (Click to Expand)
- 在 Adapty 看板中完成与 Google Play 和 App Store 的初始集成。
- 安装并配置 Adapty SDK。确保将
observerMode参数设置为true。请参阅各框架的具体说明:iOS、React Native、Flutter 和 Unity。 - 在 Adapty 看板中创建产品。
- 在 Adapty 看板中配置付费墙并为其分配产品,然后使用付费墙编辑工具对其进行自定义。
- 在 Adapty 看板中创建版位并将付费墙分配给它们。
- 在移动端代码中获取付费墙编辑工具的付费墙及其配置。
- 实现
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:) 方法。详情请参阅获取付费墙编辑工具付费墙及其配置主题。 |
| Delegate | 必填 | 用于监听付费墙事件的 AdaptyPaywallControllerDelegate。详情请参阅处理付费墙事件主题。 |
| ObserverModeDelegate | 必填 | 您在上一步中实现的 AdaptyObserverModeDelegate 对象。 |
| TagResolver | 可选 | 定义自定义标签及其解析值的字典。自定义标签在付费墙内容中充当占位符,会被动态替换为特定字符串,以在付费墙中实现个性化内容。详情请参阅付费墙编辑工具中的自定义标签主题。 |
| 返回值: |
| 对象 | 描述 |
|---|---|
| AdaptyPaywallController | 表示所请求付费墙界面的对象 |
成功创建对象后,可以通过以下方式展示它:
present(visualPaywall, animated: true)不要忘记将付费墙与购买交易关联。否则,Adapty 将无法确定购买的来源付费墙。
要在设备屏幕上显示可视化付费墙,请在 SwiftUI 中使用 .paywall 修饰符:
@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
},
)
}Request parameters:
| 参数 | 是否必填 | 描述 |
|---|---|---|
| Paywall | 必填 | 用于获取所需付费墙控制器的 AdaptyPaywall 对象。 |
| Product | 选填 | 提供 AdaptyPaywallProduct 对象数组,以优化产品在屏幕上的显示时机。若传入 nil,AdaptyUI 将自动获取所需产品。 |
| Configuration | 必填 | 包含付费墙视觉详情的 AdaptyUI.LocalizedViewConfiguration 对象。请使用 AdaptyUI.getViewConfiguration(paywall:locale:) 方法。详情请参阅获取付费墙编辑工具付费墙及其配置。 |
| TagResolver | 选填 | 定义自定义标签及其解析值的字典。自定义标签在付费墙内容中充当占位符,会被动态替换为特定字符串,从而实现付费墙内容的个性化展示。详情请参阅付费墙编辑工具中的自定义标签相关内容。 |
| 闭包参数: | ||
| 闭包参数 | 说明 | |
| :---------------------------------- | :-------------------------------------------------------------------------------- | |
| didFinishRestore | 如果 Adapty.restorePurchases() 执行成功,该回调将被触发。 | |
| didFailRestore | 如果 Adapty.restorePurchases() 执行失败,该回调将被触发。 | |
| didFailRendering | 如果界面渲染过程中发生错误,该回调将被触发。 | |
| observerModeDidInitiatePurchase | 当用户发起购买时,该回调将被触发。 | |
| 请参阅 iOS - 处理事件 主题,了解其他闭包参数。 |
不要忘记将付费墙与购买交易关联。否则,Adapty 将无法确定购买来源的付费墙。