展示流程与付费墙 - Kotlin Multiplatform

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

如果你已创建了流程或付费墙,无需在移动应用代码中手动处理其渲染逻辑来向用户展示。流程或付费墙本身已包含展示内容和展示方式的完整定义。

本指南适用于由 Adapty 渲染的流程和新付费墙编辑工具付费墙。远程配置付费墙和 Observer 模式的处理方式有所不同。

要获取下面使用的 flow 对象,请参阅获取流程与付费墙

Adapty Kotlin Multiplatform SDK 提供两种呈现流程和付费墙的方式:

  • 使用 Compose Multiplatform
  • 不使用 Compose Multiplatform

使用 Compose Multiplatform

要展示流程或付费墙,请在通过 createFlowView 方法创建的 view 上调用 view.present() 方法。每个 view 只能使用一次。如果需要再次展示流程,请重新调用 createFlowView 创建一个新的 view 实例。

重复使用同一个 view 而不重新创建,可能会导致报错。


viewModelScope.launch {
    AdaptyUI.createFlowView(flow = flow).onSuccess { view ->
        view.present()
    }.onError { error ->
        // handle the error
    }
}

显示对话框

在 Android 上展示流程或付费墙时,请使用此方法替代原生 alert 对话框。在 Android 上,普通的 alert 会显示在流程视图的后面,导致用户看不到。此方法可确保对话框在所有平台上都能正确显示在流程上方。


viewModelScope.launch {
    view.showDialog(
        title = "Close this screen?",
        content = "You will lose access to exclusive offers.",
        primaryActionTitle = "Stay",
        secondaryActionTitle = "Close"
    ).onSuccess { action ->
        if (action == AdaptyUIDialogActionType.SECONDARY) {
            // User confirmed - close the flow
            view.dismiss()
        }
        // If primary - do nothing, user stays
    }.onError { error ->
        // handle the error
    }
}

配置 iOS 展示样式

通过向 present() 方法传入 iosPresentationStyle 参数,可以配置流程或付费墙在 iOS 上的展示方式。该参数接受 AdaptyUIIOSPresentationStyle.FULLSCREEN(默认值)或 AdaptyUIIOSPresentationStyle.PAGESHEET 两个值。


viewModelScope.launch {
    val view = AdaptyUI.createFlowView(flow = flow).getOrNull()
    view?.present(iosPresentationStyle = AdaptyUIIOSPresentationStyle.PAGESHEET)
}

不使用 Compose Multiplatform

createNativeFlowView 是核心模块 io.adapty:adapty-kmp 的一部分。如果你的项目不使用 Compose Multiplatform,则无需添加 io.adapty:adapty-kmp-ui 依赖。

如需在不使用 Compose Multiplatform 的情况下嵌入流程或付费墙,请调用 createNativeFlowView。它会返回一个 AdaptyNativeFlowView,你可以将其添加到布局中:

销毁视图

从布局中移除视图时,请调用 dispose()。这会注销事件监听器并释放内部资源。

nativeView.dispose()

自定义标签

自定义标签让你无需为不同场景创建单独的流程或付费墙。想象一个可以根据用户数据动态调整的流程:不再是千篇一律的”你好!“,而是亲切地问候”你好,John!“或”你好,Ann!”

以下是自定义标签的一些使用场景:

  • 在流程或付费墙上显示用户的姓名或邮箱。
  • 展示当天是星期几以促进销售(例如”周四快乐”)。
  • 为销售的产品添加个性化信息(如健身计划名称,或 VoIP 应用中的电话号码)。

自定义标签可以帮助你创建灵活的流程,适应各种场景,让应用界面更加个性化、更具吸引力。

在某些情况下,应用可能不知道如何替换某个自定义标签——尤其是当用户使用的是旧版 AdaptyUI SDK 时。为了防止这种情况,请始终添加备用文本,以替换包含未知自定义标签的行。否则,用户可能会看到标签以代码形式显示(<USERNAME/>)。

要在流程或付费墙中使用自定义标签,请在创建流程视图时传入这些标签:

自定义计时器

计时器是推广限时特价和季节性优惠的绝佳工具。但请注意,该计时器与优惠的有效期或活动持续时间无关。它只是一个独立的倒计时,从你设置的值开始递减至零。当计时器归零后,什么都不会发生——它只会停在零。

你可以自定义计时器前后的文字,以呈现所需的信息,例如:“优惠将在:10:00 秒后结束。”

要在流程或付费墙中使用自定义计时器,请在创建流程视图时传入相应参数:

如果您已使用付费墙编辑工具自定义了付费墙,则无需在移动应用代码中额外处理渲染逻辑即可将其展示给用户。此类付费墙已包含展示内容及展示方式的完整配置。

本指南仅适用于新版付费墙编辑工具构建的付费墙。使用远程配置付费墙和 Observer 模式设计的付费墙,其展示流程有所不同。

如需展示远程配置付费墙,请参阅渲染远程配置设计的付费墙

Adapty Kotlin Multiplatform SDK 提供了两种展示付费墙的方式:

  • 使用 Compose Multiplatform
  • 不使用 Compose Multiplatform

使用 Compose Multiplatform

要显示付费墙,请在由 createPaywallView 方法创建的 view 上调用 view.present() 方法。每个 view 只能使用一次。如果需要再次显示付费墙,请重新调用 createPaywallView 创建一个新的 view 实例。

重复使用同一个 view 而不重新创建,可能会导致错误。


viewModelScope.launch {
    AdaptyUI.createPaywallView(paywall = paywall).onSuccess { view ->
        view.present()
    }.onError { error ->
        // handle the error
    }
}

显示对话框

在 Android 上展示付费墙视图时,请使用此方法代替原生的警告对话框。在 Android 上,普通的警告框会显示在付费墙视图的后面,导致用户看不到它们。此方法可确保对话框在所有平台上都能正确显示在付费墙上方。


viewModelScope.launch {
    view.showDialog(
        title = "Close paywall?",
        content = "You will lose access to exclusive offers.",
        primaryActionTitle = "Stay",
        secondaryActionTitle = "Close"
    ).onSuccess { action ->
        if (action == AdaptyUIDialogActionType.SECONDARY) {
            // User confirmed - close the paywall
            view.dismiss()
        }
        // If primary - do nothing, user stays
    }.onError { error ->
        // handle the error
    }
}

配置 iOS 呈现样式

通过向 present() 方法传递 iosPresentationStyle 参数,可以配置付费墙在 iOS 上的呈现方式。该参数接受 AdaptyUIIOSPresentationStyle.FULLSCREEN(默认值)或 AdaptyUIIOSPresentationStyle.PAGESHEET


viewModelScope.launch {
    val view = AdaptyUI.createPaywallView(paywall = paywall).getOrNull()
    view?.present(iosPresentationStyle = AdaptyUIIOSPresentationStyle.PAGESHEET)
}

不使用 Compose Multiplatform

createNativePaywallView 是核心模块 io.adapty:adapty-kmp 的一部分。如果你的项目不使用 Compose Multiplatform,则无需添加 io.adapty:adapty-kmp-ui 依赖。

若要在不使用 Compose Multiplatform 的情况下嵌入付费墙,请调用 createNativePaywallView。它会返回一个 AdaptyNativePaywallView,你可以将其添加到布局中:

销毁视图

从布局中移除视图时,请调用 dispose()。这将注销事件监听器并释放内部资源。

nativeView.dispose()

自定义标签

自定义标签让你无需为不同场景创建多个付费墙,只需一个付费墙即可根据用户数据动态调整内容。例如,与其显示通用的”你好!“,不如用”你好,John!“或”你好,Ann!“来个性化问候用户。

以下是自定义标签的一些使用场景:

  • 在付费墙上展示用户的姓名或邮箱。
  • 显示当前是星期几以促进销售(例如,“愉快的星期四”)。
  • 为你销售的产品添加个性化详情(如健身计划的名称,或 VoIP 应用中的电话号码)。

自定义标签可帮助你创建灵活的付费墙,使其能够适应各种场景,让应用界面更加个性化、更具吸引力。

在某些情况下,应用可能无法识别某个自定义标签应替换成什么内容——尤其是当用户使用的是较旧版本的 AdaptyUI SDK 时。为避免这种情况,请务必为包含未知自定义标签的文本行添加备用文本。否则,用户可能会看到标签以代码形式显示(<USERNAME/>)。

要在付费墙中使用自定义标签,请在创建付费墙视图时传入这些标签:

自定义计时器

付费墙计时器是推广限时特惠和季节性活动的利器。但需要注意的是,这个计时器与优惠的有效期或活动的持续时间无关。它只是一个独立的倒计时,从你设定的值开始递减至零。计时器归零后不会触发任何操作——它只会停在零。

你可以自定义计时器前后的文字,以呈现所需的提示信息,例如:“优惠剩余时间:10:00 秒。”

要在付费墙中使用自定义计时器,请在创建付费墙视图时传入相应参数: