展示流程和付费墙 - iOS

展示流程和付费墙
流程 在 Flow Builder 中构建——在设备上原生渲染,无需 WebView
Paywall Builder 付费墙 所有现有的 Paywall Builder 内容

如果您已经创建了流程或付费墙,无需在移动应用代码中手动处理渲染逻辑,它本身就包含了展示内容和展示方式的所有信息。

若要获取下文使用的 AdaptyUI.FlowConfiguration 对象,请参阅获取流程和付费墙

在 SwiftUI 中展示流程和付费墙

以模态视图形式展示

如需在设备屏幕上以模态视图的形式展示流程或付费墙,请在 SwiftUI 中使用 .flow 修饰符。最简调用需要 isPresentedflowConfiguration 以及五个必填回调:

.flow(
    isPresented: $flowPresented,
    flowConfiguration: <AdaptyUI.FlowConfiguration>,
    didFinishPurchase: { _, _ in /* dismiss, or do nothing to let the flow continue */ },
    didFailPurchase: { _, _ in /* handle the error */ },
    didFinishRestore: { _ in /* check access level and dismiss */ },
    didFailRestore: { _ in /* handle the error */ },
    didReceiveError: { _ in flowPresented = false }
)

如需更多控制,可添加可选回调,例如 didPerformAction 来处理按钮点击事件:

@State var flowPresented = false // ensure that you manage this variable state and set it to `true` at the moment you want to show the flow or paywall

var body: some View {
  Text("Hello, AdaptyUI!")
      .flow(
          isPresented: $flowPresented,
          flowConfiguration: <AdaptyUI.FlowConfiguration>,
          didPerformAction: { action in
              switch action {
                  case .close:
                      flowPresented = false
                  default:
                      // Handle other actions
                      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 }
      )
}

Parameters:

参数是否必填描述
isPresented必填一个绑定值,用于控制流程或付费墙页面是否显示。
flowConfiguration必填包含流程或付费墙视觉信息的 AdaptyUI.FlowConfiguration 对象。使用 AdaptyUI.getFlowConfiguration(forFlow:) 方法获取。详情请参阅获取流程和付费墙
didFinishPurchase必填Adapty.makePurchase() 成功完成时触发。流程不会自动关闭——可在此处将展示绑定值设为 false,或不做任何操作以让流程在购买后继续。
didFailPurchase必填Adapty.makePurchase() 失败时触发。
didFinishRestore必填Adapty.restorePurchases() 成功完成时触发。
didFailRestore必填Adapty.restorePurchases() 失败时触发。
didReceiveError必填当发生渲染错误或流程脚本运行时错误(例如 JavaScript 异常,AdaptyUIError 错误码 4105)时触发。如遇渲染错误,请联系 Adapty 支持
fullScreen可选决定流程或付费墙以全屏模式还是以浮层方式呈现。默认值为 true
didAppear可选当流程或付费墙视图呈现时触发。
didDisappear可选当流程或付费墙视图关闭时触发。
didPerformAction可选当用户点击按钮时触发。预定义了两个动作 ID:closeopenURL;其他为自定义动作,可在编辑器中设置。
didSelectProduct可选当用户或系统选中某个产品准备购买时触发。
didStartPurchase可选当用户开始购买流程时触发。
didFinishWebPaymentNavigation可选当网页支付导航完成时触发。
didStartRestore可选当用户开始恢复购买流程时触发。
didFailLoadingProducts可选当产品加载出错时触发。返回 true 可重新尝试加载。
didPartiallyLoadProducts可选当产品部分加载完成时触发。
showAlertItem可选一个绑定值,用于控制流程或付费墙上方弹窗的显示。
showAlertBuilder可选用于渲染弹窗视图的函数。
placeholderBuilder可选用于在流程或付费墙加载时渲染占位视图的函数。默认为 ProgressView
有关参数的更多详细信息,请参阅 iOS - 处理事件 主题。

以非模态视图方式呈现

你也可以将流程和付费墙作为导航目标或内联视图嵌入到应用的导航流程中。直接在 SwiftUI 视图中使用 AdaptyFlowView

AdaptyFlowView(
    flowConfiguration: <AdaptyUI.FlowConfiguration>,
    didFinishPurchase: { product, purchaseResult in
        // Dismiss the view, or do nothing to let the flow continue
    },
    didFailPurchase: { product, error in
        // Handle purchase failure
    },
    didFinishRestore: { profile in
        // Handle successful restore
    },
    didFailRestore: { error in
        // Handle restore failure
    },
    didReceiveError: { error in
        // Handle the error (rendering or JS exception from the flow script).
    }
)

在 UIKit 中展示流程和付费墙

如需在设备屏幕上展示流程或付费墙,请按以下步骤操作:

  1. 使用 AdaptyUI.flowController(with:delegate:) 方法初始化要展示的可视化流程:

    import AdaptyUI
    
    let visualFlow = try AdaptyUI.flowController(
        with: <AdaptyUI.FlowConfiguration>,
        delegate: <AdaptyFlowControllerDelegate>
    )

    请求参数:

    参数是否必填描述
    flowConfiguration必填一个 AdaptyUI.FlowConfiguration 对象,包含流程或付费墙的视觉详情。使用 AdaptyUI.getFlowConfiguration(forFlow:) 方法。详情请参阅 获取流程和付费墙
    delegate必填一个 AdaptyFlowControllerDelegate,用于监听流程和付费墙事件。详情请参阅 处理流程和付费墙事件

    返回值: | 对象 | 描述 | | :---------------------- | :------------------------------------------------------- | | AdaptyFlowController | 表示所请求的流程或付费墙页面的对象。 |

  2. 对象成功创建后,即可将其显示在设备屏幕上:

    present(visualFlow, animated: true)

想看看 Adapty SDK 在移动应用中集成的真实案例?请查看我们的示例应用,其中演示了完整的集成流程,包括展示付费墙、发起购买以及其他基本功能。

如果你已使用付费墙编辑工具自定义了付费墙,则无需在移动应用代码中手动处理其渲染逻辑来向用户展示。此类付费墙已包含应展示的内容及其展示方式。 要获取下面使用的 AdaptyUI.PaywallConfiguration 对象,请参阅获取付费墙编辑工具的付费墙及其配置

在 SwiftUI 中展示付费墙

以模态视图形式展示

如需在设备屏幕上以模态视图的形式展示可视化付费墙,请在 SwiftUI 中使用 .paywall 修饰符:

@State var paywallPresented = false // ensure that you manage this variable state and set it to `true` at the moment you want to show the paywall

var body: some View {
  Text("Hello, AdaptyUI!")
      .paywall(
          isPresented: $paywallPresented,
          paywallConfiguration: <AdaptyUI.PaywallConfiguration>,
          didPerformAction: { action in
              switch action {
                  case .close:
                      paywallPresented = false
                  default:
                      // Handle other actions
                      break
              }
          },
          didFinishPurchase: { product, profile in paywallPresented = false },
          didFailPurchase: { product, error in /* handle the error */ },
          didFinishRestore: { profile in /* check access level and dismiss */  },
          didFailRestore: { error in /* handle the error */ },
          didFailRendering: { error in paywallPresented = false }
      )
}

I notice the input contains only “Parameters:” with no MDX content to translate. However, following the instructions, I should return whatever was given. Since there is only this minimal text:

Parameters:

参数是否必填描述
isPresented必填用于控制付费墙页面是否显示的绑定值。
paywallConfiguration必填包含付费墙视觉细节的 AdaptyUI.PaywallConfiguration 对象。使用 AdaptyUI.paywallConfiguration(for:products:viewConfiguration:observerModeResolver:tagResolver:timerResolver:) 方法。详情请参阅获取付费墙编辑工具的付费墙及其配置
didFailPurchase必填Adapty.makePurchase() 失败时触发。
didFinishRestore必填Adapty.restorePurchases() 成功完成时触发。
didFailRestore必填Adapty.restorePurchases() 失败时触发。
didFailRendering必填当渲染界面时发生错误时触发。如遇此情况,请联系 Adapty 支持团队
fullScreen可选决定付费墙以全屏模式还是弹窗模式显示,默认值为 true
didAppear可选当付费墙视图呈现时触发。
didDisappear可选当付费墙视图关闭时触发。
didPerformAction可选当用户点击按钮时触发。不同按钮对应不同的操作 ID,其中 closeopenURL 是预定义的操作 ID,其他则为自定义 ID,可在编辑工具中设置。
didSelectProduct可选当某个产品被用户或系统选中以进行购买时触发此回调。
didStartPurchase可选当用户开始购买流程时触发。
didFinishPurchase可选Adapty.makePurchase() 成功完成时触发。
didFinishWebPaymentNavigation可选当网页支付导航完成时触发。
didStartRestore可选当用户开始恢复购买流程时触发。
didFailLoadingProducts可选当产品加载过程中出现错误时触发。返回 true 可重试加载。
didPartiallyLoadProducts可选当产品仅部分加载完成时触发。
showAlertItem可选用于管理付费墙上方提示项显示的绑定值。
showAlertBuilder可选用于渲染提示视图的函数。
placeholderBuilder可选用于在付费墙加载时渲染占位视图的函数。
有关参数的更多详细信息,请参阅 iOS - 处理事件 主题。

以非模态视图形式呈现

你也可以将付费墙作为导航目标或内联视图嵌入应用的导航流程中。在 SwiftUI 视图中直接使用 AdaptyPaywallView

AdaptyPaywallView(
    paywallConfiguration: <AdaptyUI.PaywallConfiguration>,
    didFailPurchase: { product, error in
        // Handle purchase failure
    },
    didFinishRestore: { profile in
        // Handle successful restore
    },
    didFailRestore: { error in
        // Handle restore failure
    },
    didFailRendering: { error in
        // Handle rendering error
    }
)

在 UIKit 中展示付费墙

要在设备屏幕上显示可视化付费墙,请按以下步骤操作:

  1. 使用 .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表示所请求付费墙页面的对象
  1. 对象成功创建后,可以将其显示在设备屏幕上:

    present(visualPaywall, animated: true)

想看 Adapty SDK 在移动应用中集成的真实案例?查看我们的示例应用,其中展示了完整的接入流程,包括显示付费墙、发起购买以及其他基本功能。