---
title: "在旧版 Android SDK 中处理付费墙事件"
description: "使用 Adapty SDK 处理 Android（旧版）中的订阅事件。"
---

使用[付费墙编辑工具](adapty-paywall-builder-legacy)配置的付费墙无需额外代码即可完成购买和恢复购买。但是，它们会生成一些你的应用可以响应的事件。这些事件包括按钮按压（关闭按钮、URL、产品选择等），以及付费墙上购买相关操作的通知。请在下方了解如何响应这些事件。

:::warning
本指南仅适用于**旧版付费墙编辑工具付费墙**，需要 Adapty SDK v2.x 及以下版本。如需在 Adapty SDK v3.0 或更高版本中展示使用新版付费墙编辑工具设计的付费墙，请参阅 [Android - 处理使用新版付费墙编辑工具设计的付费墙事件](android-handling-events)。
:::

如果你需要控制或监控购买界面上发生的过程，请实现 `AdaptyUiEventListener` 方法。

如果你希望在某些情况下保留默认行为，可以继承 `AdaptyUiDefaultEventListener` 并仅覆盖你想要更改的方法。

以下是 `AdaptyUiDefaultEventListener` 的默认实现。

### 用户生成的事件 \{#user-generated-events\}

#### 操作 \{#actions\}

如果用户执行了某个操作（`Close`、`OpenURL` 或 `Custom`），则会调用此方法：

```kotlin showLineNumbers title="Kotlin"
override fun onActionPerformed(action: AdaptyUI.Action, view: AdaptyPaywallView) {
    when (action) {
        AdaptyUI.Action.Close -> (view.context as? Activity)?.onBackPressed()
        
        is AdaptyUI.Action.OpenUrl -> //launching intent to open url
        
        is AdaptyUI.Action.Custom -> //no default action
    }
}
```

支持以下操作类型：

- `Close`
- `OpenUrl(url)`
- `Custom(id)`

请注意，你至少需要实现对 `Close` 和 `OpenURL` 的响应。例如，如果用户点击关闭按钮，将触发 `Close` 操作，你需要关闭付费墙。

:::warning
当用户点击系统返回按钮而非界面上的关闭图标时，**不会**调用此方法。
:::

> 💡 登录操作
>
> 如果你在看板中配置了登录操作，你应该为 id 为 `"login"` 的自定义操作实现响应逻辑。

#### 产品选择 \{#product-selection\}

如果某个产品被选中进行购买（由用户或系统触发），则会调用此方法：

```kotlin showLineNumbers title="Kotlin"
public override fun onProductSelected(
    product: AdaptyPaywallProduct,
    view: AdaptyPaywallView,
) {}
```

#### 开始购买 \{#started-purchase\}

如果用户发起购买流程，则会调用此方法：

```kotlin showLineNumbers title="Kotlin"
public override fun onPurchaseStarted(
    product: AdaptyPaywallProduct,
    view: AdaptyPaywallView,
) {}
```

在观察者模式下不会调用此方法。请参阅 [Android - 在观察者模式下展示付费墙编辑工具付费墙](android-present-paywall-builder-paywalls-in-observer-mode) 了解详情。

#### 取消购买 \{#canceled-purchase\}

如果用户发起购买流程但随后手动中断，则会调用以下方法。当 `Adapty.makePurchase()` 函数以 `USER_CANCELED` 错误结束时，该事件会触发：

```kotlin showLineNumbers title="Kotlin"
public override fun onPurchaseCanceled(
    product: AdaptyPaywallProduct,
    view: AdaptyPaywallView,
) {}
```

在观察者模式下不会调用此方法。请参阅 [Android - 在观察者模式下展示付费墙编辑工具付费墙](android-present-paywall-builder-paywalls-in-observer-mode) 了解详情。

#### 购买成功 \{#successful-purchase\}

如果 `Adapty.makePurchase()` 成功，则会调用此方法：

```kotlin showLineNumbers title="Kotlin"
public override fun onPurchaseSuccess(
    profile: AdaptyProfile?,
    product: AdaptyPaywallProduct,
    view: AdaptyPaywallView,
) {
    (view.context as? Activity)?.onBackPressed()
}
```

在这种情况下，我们建议关闭该界面。

在观察者模式下不会调用此方法。请参阅 [Android - 在观察者模式下展示付费墙编辑工具付费墙](android-present-paywall-builder-paywalls-in-observer-mode) 了解详情。

#### 购买失败 \{#failed-purchase\}

如果 `Adapty.makePurchase()` 失败，则会调用此方法：

```kotlin showLineNumbers title="Kotlin"
public override fun onPurchaseFailure(
    error: AdaptyError,
    product: AdaptyPaywallProduct,
    view: AdaptyPaywallView,
) {}
```

在观察者模式下不会调用此方法。请参阅 [Android - 在观察者模式下展示付费墙编辑工具付费墙](android-present-paywall-builder-paywalls-in-observer-mode) 了解详情。

#### 恢复购买成功 \{#successful-restore\}

如果 `Adapty.restorePurchases()` 成功，则会调用此方法：

```kotlin showLineNumbers title="Kotlin"
public override fun onRestoreSuccess(
    profile: AdaptyProfile,
    view: AdaptyPaywallView,
) {}
```

如果用户拥有所需的 `accessLevel`，我们建议关闭该界面。请参阅[订阅状态](android-listen-subscription-changes)了解如何检查。

#### 恢复购买失败 \{#failed-restore\}

如果 `Adapty.restorePurchases()` 失败，则会调用此方法：

```kotlin showLineNumbers title="Kotlin"
public override fun onRestoreFailure(
    error: AdaptyError,
    view: AdaptyPaywallView,
) {}
```

### 数据获取与渲染 \{#data-fetching-and-rendering\}

#### 产品加载错误 \{#product-loading-errors\}

如果你在初始化时没有传入产品，AdaptyUI 将自行从服务器获取所需对象。如果该操作失败，AdaptyUI 将通过调用此方法报告错误：

```kotlin showLineNumbers title="Kotlin"
public override fun onLoadingProductsFailure(
    error: AdaptyError,
    view: AdaptyPaywallView,
): Boolean = false
```

如果你返回 `true`，AdaptyUI 将在 2 秒后重试请求。

#### 渲染错误 \{#rendering-errors\}

如果在界面渲染过程中发生错误，将通过调用此方法进行报告：

```kotlin showLineNumbers title="Kotlin"
public override fun onRenderingError(
    error: AdaptyError,
    view: AdaptyPaywallView,
) {}
```

在正常情况下，此类错误不应发生，如果你遇到了此类错误，请告知我们。