---
title: "在 Observer 模式下展示流程 - Kotlin Multiplatform"
description: "在 Kotlin Multiplatform 应用中以 Observer 模式展示流程和付费墙编辑工具付费墙，同时使用您自己的代码处理购买。"
---

如果你已使用编辑工具自定义了流程或付费墙，则无需在移动应用代码中手动处理渲染逻辑来向用户展示它。此类流程或付费墙已同时包含展示内容和展示方式。

:::warning
本节仅适用于[观察者模式](observer-vs-full-mode)。如果你不在观察者模式下工作，请参阅[展示流程与付费墙](kmp-present-paywalls)主题。
:::

:::info
此功能需要 Adapty Kotlin Multiplatform SDK 4.0（beta）或更高版本——此前仅在原生 iOS 和 Android SDK 中可用。请参阅[迁移指南](migration-to-kmp-sdk-v4)进行升级。
:::

<details>
   <summary>在开始展示流程之前（点击展开）</summary>

1. 在 Adapty 中完成初始集成：[与 App Store 集成](initial_ios) 和 [与 Google Play 集成](initial-android)。
   2. 安装并配置 Adapty SDK。请确保在配置构建器中调用 `withObserverMode(true)`。请参阅 [Kotlin Multiplatform SDK 安装指南](sdk-installation-kotlin-multiplatform#activate-adapty-sdk)。
   3. 在 Adapty 看板中[创建产品](create-product)。
   4. [在编辑工具中配置流程或付费墙](create-paywall)，并为其分配产品。
   5. [创建版位并将流程或付费墙分配给对应版位](create-placement)。
   6. 在移动应用代码中[获取流程及其配置](kmp-get-pb-paywalls)。

</details>

在观察者模式下，SDK 不会代替你执行购买操作。当用户在 Adapty 渲染的流程或付费墙中点击购买或恢复按钮时，SDK 会调用你的 `AdaptyUIObserverModeResolver`——请在其中使用你自己的代码完成购买或恢复操作。

1. 实现 `AdaptyUIObserverModeResolver` 接口：

   ```kotlin showLineNumbers
   import com.adapty.kmp.AdaptyUIObserverModeResolver
   import com.adapty.kmp.models.AdaptyPaywallProduct
   import com.adapty.kmp.models.AdaptyUIFlowView

   class MyObserverModeResolver : AdaptyUIObserverModeResolver {
       override fun observerModeDidInitiatePurchase(
           view: AdaptyUIFlowView,
           product: AdaptyPaywallProduct,
           onStartPurchase: () -> Unit,
           onFinishPurchase: () -> Unit
       ) {
           onStartPurchase() // the view shows its loading indicator
           // make the purchase with your own code,
           // then report the transaction to Adapty and call:
           onFinishPurchase() // the view hides the loading indicator
       }

       override fun observerModeDidInitiateRestore(
           view: AdaptyUIFlowView,
           onStartRestore: () -> Unit,
           onFinishRestore: () -> Unit
       ) {
           onStartRestore()
           // restore purchases with your own code, then:
           onFinishRestore()
       }
   }
   ```

`observerModeDidInitiatePurchase` 方法会通知你用户已发起购买，`observerModeDidInitiateRestore` 则通知用户已发起恢复。请在收到通知后触发你自定义的购买或恢复流程。

另外，请记得调用以下回调，以便将购买或恢复的进度通知给 AdaptyUI。这对于正确的流程行为（例如显示加载动画等）是必要的：

| 回调 | 描述 |
   | :----------------- | :------------------------------------------------------------------------------- |
   | onStartPurchase()  | 调用此回调以通知 AdaptyUI 购买已开始。  |
   | onFinishPurchase() | 调用此回调以通知 AdaptyUI 购买已完成。 |
   | onStartRestore()   | 调用此回调以通知 AdaptyUI 恢复购买已开始。   |
   | onFinishRestore()  | 调用此回调以通知 AdaptyUI 恢复购买已完成。  |

在您的代码运行期间，流程保持开启状态——在购买或恢复成功后，请自行关闭它。

2. 在展示任何屏幕之前注册解析器：

   ```kotlin showLineNumbers
   import com.adapty.kmp.AdaptyUI

   AdaptyUI.setObserverModeResolver(MyObserverModeResolver())
   ```

   如果未注册解析器，流程视图将无法将购买请求传递给您的代码，用户点击购买按钮时将不会有任何响应。

3. 按常规方式创建并展示流程视图：[获取流程并创建其视图](kmp-get-pb-paywalls)，然后[展示它](kmp-present-paywalls)。无需额外参数——一旦注册了解析器，每个 Adapty 渲染的流程或付费墙都会通过它来路由购买和恢复操作。

:::warning
不要忘记[上报交易并将其与付费墙关联](report-transactions-observer-mode-kmp)。否则，Adapty 将无法识别该交易，也无法确定购买来源的付费墙。
:::