---
title: "在 React Native SDK 中识别用户"
description: "在 React Native 中设置 Adapty 进行应用内订阅管理的快速入门指南。"
---

:::important
如果您有自己的身份验证系统，本指南正是为您准备的。您将在此学习如何在 Adapty 中管理用户画像，使其与您现有的身份验证系统保持一致。
:::

您管理用户购买记录的方式取决于应用的身份验证模式：
- 如果您的应用不使用后端身份验证且不存储用户数据，请参阅[匿名用户](#anonymous-users)部分。
- 如果您的应用已有（或将有）后端身份验证，请参阅[已识别用户](#identified-users)部分。
**核心概念**：
- **用户画像**是 SDK 正常运行所必需的实体，由 Adapty 自动创建。
- 用户画像可以是匿名的**（无 customer user ID）**，也可以是已识别的**（有 customer user ID）**。
- 您提供 **customer user ID** 是为了将 Adapty 中的用户画像与您内部的身份验证系统进行交叉关联。

以下是匿名用户与已识别用户的区别：
|                         | 匿名用户                          | 已识别用户                                        |
|-------------------------|-----------------------------------|---------------------------------------------------|
| **购买管理**            | 通过商店层级恢复购买              | 通过客户用户 ID 在多设备间保留购买记录            |
| **用户画像管理**        | 每次重新安装时创建新用户画像      | 跨会话和设备使用同一用户画像                      |
| **数据持久性**          | 匿名用户的数据与应用安装绑定      | 已识别用户的数据在应用重新安装后依然保留          |
## 匿名用户 \{#anonymous-users\}

如果你没有后端身份验证，**则无需在应用代码中处理身份验证**：
1. 当 SDK 在应用首次启动时被激活，Adapty 会**为该用户创建一个新的用户画像**。
2. 当用户在应用内完成购买后，该购买记录会**关联到其 Adapty 用户画像及商店账号**。
3. 当用户**重新安装**应用或在**新设备**上安装时，Adapty 会**在激活时创建一个新的匿名用户画像**。
4. 如果用户之前在您的应用中有过购买记录，默认情况下，SDK 激活时会自动从 App Store 同步其购买历史。
因此，对于匿名用户，每次安装都会创建新的用户画像，但这并不是问题，因为在 Adapty 分析中，你可以[配置什么情况下会被视为新安装](general#4-installs-definition-for-analytics)。

:::note
备份恢复与重新安装的处理方式不同。默认情况下，当用户从备份恢复时，SDK 会保留缓存数据，不会创建新的用户画像。你可以通过 `clearDataOnBackup` 设置来调整此行为。[了解更多](sdk-installation-react-native-pure#clear-data-on-backup-restore)。
:::
对于匿名用户，需要按**设备 ID** 统计安装量。此时，每次在设备上安装应用都会被计为一次安装，包括重新安装。
## 已识别用户 \{#identified-users\}

在应用中识别用户有两种方式：

- [**登录/注册时：**](#during-loginsignup) 如果用户在应用启动后才登录，请在他们完成身份验证时调用 `identify()`，并传入 customer user ID。

- [**SDK 初始化时：**](#during-the-sdk-activation) 如果应用启动时已有存储的 customer user ID，可在调用 `activate()` 时直接传入。
:::important
默认情况下，当 Adapty 收到来自某个 Customer User ID 的购买请求，而该 ID 当前已与另一个 Customer User ID 关联时，访问等级将被共享，两个用户画像均可获得付费访问权限。你可以将此设置配置为将付费访问权限从一个用户画像转移到另一个，或完全禁用共享。详情请参阅[此文章](general#6-sharing-paid-access-between-user-accounts)。
:::

  <img src="/assets/shared/img/identify-diagram.webp"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '700px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

### 登录/注册时 \{#during-loginsignup\}

如果你在应用启动后才识别用户身份（例如用户登录或注册之后），请使用 `identify` 方法设置其 customer user ID。

- 如果你**之前从未使用过该 customer user ID**，Adapty 会自动将其关联到当前用户画像。
- 如果你**之前已使用该 customer user ID 识别过用户**，Adapty 会切换到与该 customer user ID 关联的用户画像。
:::important
每位用户的 Customer User ID 必须唯一。如果将该参数硬编码为固定值，所有用户将被视为同一个人。
:::

在调用其他 SDK 方法之前，请务必先 `await` `identify`。并发调用会产生 `#3006 profileWasChanged` 错误，或导致操作落在匿名用户画像上。详见 [React Native SDK 调用顺序](react-native-sdk-call-order)。

```typescript showLineNumbers
try {
    await adapty.identify("YOUR_USER_ID"); // Unique for each user
    // successfully identified
} catch (error) {
    // handle the error
}
```
### 在 SDK 激活期间 \{#during-the-sdk-activation\}

如果在激活 SDK 时已知客户用户 ID，可以直接在 `activate` 方法中传入，无需单独调用 `identify`。

如果已知客户用户 ID，但在激活之后才设置，则意味着在激活时 Adapty 会创建一个新的匿名用户画像，只有在调用 `identify` 后才会切换到已有的用户画像。
您可以传入已有的客户用户 ID（之前使用过的），也可以传入一个新的。如果传入新 ID，激活时创建的新用户画像将自动与该客户用户 ID 关联。

:::note
默认情况下，创建匿名用户画像不会影响分析看板，因为安装量是基于设备 ID 统计的。
设备 ID 代表应用从商店安装到设备上的一次安装实例，仅在应用重新安装后才会重新生成。
它与此次安装是首次还是重复安装无关，也与是否使用了已有的客户用户 ID 无关。

创建用户画像（在 SDK 激活或退出登录时）、登录，或在不重新安装应用的情况下升级应用，均不会产生额外的安装事件。
如果您希望根据唯一用户而非设备来统计安装量，请前往 **App settings** 并配置 [**Installs definition for analytics**](general#4-installs-definition-for-analytics)。
:::

```typescript showLineNumbers
adapty.activate("PUBLIC_SDK_KEY", {
    customerUserId: "YOUR_USER_ID" // Customer user IDs must be unique for each user. If you hardcode the parameter value, all users will be considered as one.
});
```
### 注销用户 \{#log-users-out\}

如果您有用于注销用户的按钮，请使用 `logout` 方法。

:::important
注销用户将为该用户创建新的匿名用户画像。
:::

```typescript showLineNumbers
try {
    await adapty.logout();
    // successful logout
} catch (error) {
    // handle the error
}
```

:::info
要让用户重新登录应用，请使用 `identify` 方法。
:::

### 允许未登录用户购买 \{#allow-purchases-without-login\}

如果你的用户在登录前和登录后都可以进行购买，你需要确保他们登录后仍能保留访问权限：
1. 当未登录用户发起购买时，Adapty 会将其绑定到匿名用户画像 ID。
2. 当用户登录账户后，Adapty 会切换到使用其已识别的用户画像。
    - 如果是新的 customer user ID（例如，购买发生在注册之前），Adapty 会将该 customer user ID 分配给当前用户画像，从而保留所有购买历史记录。
    - 如果是已存在的 customer user ID（该 customer user ID 已与某个用户画像关联），则需要在用户画像切换后获取实际的访问等级。你可以在识别完成后立即调用 [`getProfile`](react-native-check-subscription-status)，也可以[监听用户画像更新](react-native-check-subscription-status)以自动同步数据。
## 下一步 \{#next-steps\}

恭喜！您已在应用中成功实现了应用内购买逻辑！祝您的应用变现一切顺利！
想要深入探索 Adapty 的更多功能，可以参考以下主题：
- [**测试**](troubleshooting-test-purchases)：确保一切按预期正常运行
- [**用户引导**](react-native-onboardings)：通过用户引导吸引用户并提升留存率
- [**集成**](configuration)：只需一行代码即可与营销归因和数据分析服务完成集成
- [**设置自定义用户画像属性**](react-native-setting-user-attributes)：为用户画像添加自定义属性并创建市场细分，从而发起 A/B 测试或向不同用户展示不同的付费墙