---
title: "实现网页付费墙"
description: "了解如何使用 Adapty SDK 在 Capacitor 应用中实现网页付费墙。"
---

:::important
开始之前，请确保您已[在看板中配置了网页付费墙](web-paywall)，并安装了 Adapty SDK 3.6.1 或更高版本。
:::

## 打开网页付费墙 \{#open-web-paywalls\}

如果您使用的是自行开发的付费墙，则需要使用 SDK 方法来处理网页付费墙。`.openWebPaywall` 方法：
1. 生成唯一 URL，使 Adapty 能够将向特定用户展示的付费墙与其被重定向到的网页关联起来。
2. 追踪用户返回应用的时机，然后以较短的时间间隔请求 `.getProfile`，以确定用户画像的访问权限是否已更新。

这样，如果付款成功且访问权限已更新，应用中的订阅将几乎立即激活。

```typescript showLineNumbers

try {
  await adapty.openWebPaywall({ paywallOrProduct: product });
} catch (error) {
  console.error('Failed to open web paywall:', error);
}
```

:::note
`openWebPaywall` 方法有两个版本：
1. `openWebPaywall({ paywallOrProduct: product })` — 按付费墙生成 URL，并将产品数据添加到 URL 中。
2. `openWebPaywall({ paywallOrProduct: paywall })` — 按付费墙生成 URL，但不将产品数据添加到 URL 中。当 Adapty 付费墙中的产品与网页付费墙中的产品不同时使用此版本。
:::

#### 处理错误 \{#handle-errors\}

| 错误                                    | 描述                             | 建议操作                                         |
|-----------------------------------------|----------------------------------|--------------------------------------------------|
| AdaptyError.paywallWithoutPurchaseUrl   | 付费墙未配置网页购买 URL         | 检查付费墙是否已在 Adapty 看板中正确配置         |
| AdaptyError.productWithoutPurchaseUrl   | 产品没有网页购买 URL             | 在 Adapty 看板中验证产品配置                     |
| AdaptyError.failedOpeningWebPaywallUrl  | 无法在浏览器中打开 URL           | 检查设备设置或提供备用购买方式                   |
| AdaptyError.failedDecodingWebPaywallUrl | 无法对 URL 中的参数进行正确编码  | 验证 URL 参数是否有效且格式正确                  |

## 在应用内浏览器中打开网页付费墙 \{#open-web-paywalls-in-an-in-app-browser\}

:::important
从 Adapty SDK v. 3.15 开始支持在应用内浏览器中打开网页付费墙。
:::

默认情况下，网页付费墙在外部浏览器中打开。

为了提供无缝的用户体验，您可以在应用内浏览器中打开网页付费墙。这将在您的应用内显示网页购买页面，使用户无需切换应用即可完成交易。

要启用此功能，请在 `openWebPaywall` 中将 `openIn` 设置为 `WebPresentation.BrowserInApp`：

```typescript showLineNumbers

try {
    await adapty.openWebPaywall({
        paywallOrProduct: product,
        openIn: WebPresentation.BrowserInApp, // default – WebPresentation.BrowserOutApp
    });
} catch (error) {
    console.error('Failed to open web paywall:', error);
}
```