---
title: "在 React Native SDK 中识别用户"
description: "了解如何在 React Native 应用中使用 Adapty SDK 识别用户。"
---

Adapty 会为每个用户创建一个内部用户画像 ID。但是，如果您拥有自己的身份验证系统，则应设置您自己的 Customer User ID。您可以在 [用户画像](profiles-crm) 部分通过 Customer User ID 查找用户，也可以在 [服务端 API](getting-started-with-server-side-api) 中使用它，该 ID 将被发送至所有集成。

### 在配置时设置 Customer User ID \{#setting-customer-user-id-on-configuration\}

如果您在配置时已有用户 ID，只需将其作为 `customerUserId` 参数传递给 `.activate()` 方法：

```typescript showLineNumbers
adapty.activate("PUBLIC_SDK_KEY", {
    customerUserId: "YOUR_USER_ID"
});
```

:::tip

想了解 Adapty SDK 如何集成到移动应用中的真实示例？请查看我们的[示例应用](sample-apps)，其中展示了完整的配置过程，包括显示付费墙、完成购买以及其他基本功能。

:::

### 在配置后设置 Customer User ID \{#setting-customer-user-id-after-configuration\}

如果您在 SDK 配置时还没有用户 ID，可以随时使用 `.identify()` 方法进行设置。最常见的使用场景是在注册或授权之后，即用户从匿名用户切换为已认证用户时。

```typescript showLineNumbers
try {
    await adapty.identify("YOUR_USER_ID");
    // successfully identified
} catch (error) {
    // handle the error
}
```

请求参数：

- **Customer User ID**（必填）：字符串类型的用户标识符。

:::warning
重新提交重要用户数据

在某些情况下，例如用户重新登录账户时，Adapty 的服务器可能已经存有该用户的信息。在这些场景下，Adapty SDK 将自动切换到新用户。如果您曾向匿名用户传递过任何数据（例如自定义属性或来自第三方网络的归因数据），您需要为已识别的用户重新提交这些数据。

同样重要的是，在识别用户后，您应重新请求所有付费墙和产品，因为新用户的数据可能有所不同。
:::

### 登出与登入 \{#logging-out-and-logging-in\}

您可以随时调用 `.logout()` 方法使用户登出：

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

之后，您可以使用 `.identify()` 方法使用户重新登录。

## 分配 `appAccountToken`（iOS） \{#assign-appaccounttoken-ios\}

[`appAccountToken`](https://developer.apple.com/documentation/storekit/product/purchaseoption/appaccounttoken(_:)) 是一个 **UUID**，用于将 App Store 交易与您的内部用户身份关联起来。
StoreKit 会将此令牌与每笔交易相关联，以便您的后端可以将 App Store 数据与您的用户进行匹配。

请为每位用户生成一个稳定的 UUID，并在同一账户的不同设备上复用该 UUID。
这可确保购买记录和 App Store 通知始终与正确的用户关联。

您可以通过两种方式设置该令牌——在 SDK 激活时或在识别用户时。

:::important
您必须始终将 `appAccountToken` 与 `customerUserId` 一起传递。
如果仅传递令牌而不传递 `customerUserId`，该令牌将不会包含在交易中。
:::

```typescript showLineNumbers
// During configuration:
adapty.activate("PUBLIC_SDK_KEY", {
    customerUserId: "YOUR_USER_ID",
    ios: { appAccountToken: "YOUR_APP_ACCOUNT_TOKEN" },
});

// Or when identifying users
try {
    await adapty.identify("YOUR_USER_ID", {
        ios: {appAccountToken: 'YOUR_APP_ACCOUNT_TOKEN'}
    });
    // successfully identified
} catch (error) {
    // handle the error
}
```

### 设置混淆账户 ID（Android） \{#set-obfuscated-account-ids-android\}

Google Play 在某些使用场景下要求使用混淆账户 ID，以增强用户隐私和安全性。这些 ID 可帮助 Google Play 识别购买行为，同时保持用户信息的匿名性，这对于防欺诈和数据分析尤为重要。

如果您的应用处理敏感用户数据，或需要遵守特定的隐私法规，您可能需要设置这些 ID。混淆 ID 允许 Google Play 在不暴露真实用户标识符的情况下追踪购买记录。

```typescript showLineNumbers
// During configuration:
adapty.activate("PUBLIC_SDK_KEY", {
    customerUserId: "YOUR_USER_ID",
    android: { obfuscatedAccountId: 'YOUR_OBFUSCATED_ACCOUNT_ID' }
});

// Or when identifying users
try {
    await adapty.identify("YOUR_USER_ID", {
        android: { obfuscatedAccountId: 'YOUR_OBFUSCATED_ACCOUNT_ID' }
    });
    // successfully identified
} catch (error) {
    // handle the error
}
```