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

:::important
如果您有自己的身份验证系统，本指南适合您。在这里，您将学习如何在 Adapty 中管理用户画像，以确保其与您现有的身份验证系统保持一致。
:::

您如何管理用户购买取决于您的应用的身份验证模型：
- 如果您的应用不使用后端身份验证且不存储用户数据，请参阅[匿名用户部分](#anonymous-users)。
- 如果您的应用已有（或将有）后端身份验证，请参阅[已识别用户部分](#identified-users)。

**核心概念**：
- **用户画像** 是 SDK 运行所需的实体。Adapty 会自动创建它们。
- 它们可以是匿名的**（无 customer user ID）**或已识别的**（有 customer user ID）**。
- 您提供 **customer user ID** 是为了将 Adapty 中的用户画像与您内部的身份验证系统进行关联。

以下是匿名用户和已识别用户的区别：

|                         | 匿名用户                                              | 已识别用户                                                             |
|-------------------------|---------------------------------------------------|-------------------------------------------------------------------------|
| **购买管理** | 应用商店级别的购买恢复                  | 通过 customer user ID 在设备间维护购买历史 |
| **用户画像管理**  | 每次重新安装时创建新的用户画像                    | 跨会话和设备使用同一用户画像                            |
| **数据持久性**    | 匿名用户的数据与应用安装绑定 | 已识别用户的数据在应用安装间持续保存                |

## 匿名用户 \{#anonymous-users\}

如果您没有后端身份验证，**您无需在应用代码中处理身份验证**：

1. 当 SDK 在应用首次启动时激活，Adapty **为用户创建一个新的用户画像**。
2. 当用户在应用中购买任何内容时，该购买将**与其 Adapty 用户画像和应用商店账户关联**。
3. 当用户**重新安装**应用或在**新设备**上安装时，Adapty **在激活时创建一个新的匿名用户画像**。
4. 如果用户之前在您的应用中进行过购买，默认情况下，他们的购买记录会在 SDK 激活时自动从 App Store 同步。

因此，对于匿名用户，每次安装都会创建新的用户画像，但这不是问题，因为在 Adapty 分析中，您可以[配置什么将被视为新安装](general#4-installs-definition-for-analytics)。

对于匿名用户，您需要按**设备 ID** 统计安装量。在这种情况下，设备上的每次应用安装（包括重新安装）都计为一次安装。

## 已识别用户 \{#identified-users\}

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

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

- [**在 SDK 激活时：**](#during-the-sdk-activation) 如果应用启动时您已有存储的 customer user ID，请在调用 `activate()` 时传入它。

:::important
默认情况下，当 Adapty 收到一个当前与另一个 Customer User 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 必须唯一。如果您将参数值硬编码，所有用户将被视为同一个人。
:::

<Tabs groupId="current-os" queryString>
<TabItem value="kotlin" label="Kotlin" default>

```kotlin showLineNumbers
Adapty.identify("YOUR_USER_ID") { error -> // Unique for each user
    if (error == null) {
        // successful identify
    }
}
```

</TabItem>
<TabItem value="java" label="Java" default>
```java showLineNumbers
// User IDs must be unique for each user
Adapty.identify("YOUR_USER_ID", error -> {
    if (error == null) {
        // successful identify
    }
});
```
</TabItem>
</Tabs>

### 在 SDK 激活时 \{#during-the-sdk-activation\}

如果您在激活 SDK 时已知晓 customer user ID，可以在 `activate` 方法中传入，而无需单独调用 `identify`。

如果您知道 customer user ID 但仅在激活后才设置它，这意味着在激活时，Adapty 将创建一个新的匿名用户画像，只有在您调用 `identify` 后才会切换到现有用户画像。

您可以传入现有的 customer user ID（之前已使用过的）或新的 customer user ID。如果传入新的，激活时创建的新用户画像将自动与该 customer user ID 关联。

:::note
默认情况下，创建匿名用户画像不会影响分析看板，因为安装次数基于设备 ID 统计。

设备 ID 代表从应用商店在设备上的一次应用安装，仅在应用重新安装后才会重新生成。
它不取决于是首次安装还是重复安装，也不取决于是否使用了现有的 customer user ID。

创建用户画像（在 SDK 激活或退出登录时）、登录或在不重新安装应用的情况下升级应用，都不会产生额外的安装事件。

如果您希望按唯一用户而非设备统计安装量，请前往 **App settings** 并配置 [**Installs definition for analytics**](general#4-installs-definition-for-analytics)。
:::

<Tabs>
<TabItem value="kotlin" label="Kotlin" default>

```kotlin showLineNumbers
AdaptyConfig.Builder("PUBLIC_SDK_KEY")
    .withCustomerUserId("user123") // Customer user IDs must be unique for each user. If you hardcode the parameter value, all users will be considered as one.
    .build()
```
</TabItem>
<TabItem value="java" label="Java" default>

```java showLineNumbers
new AdaptyConfig.Builder("PUBLIC_SDK_KEY")
    .withCustomerUserId("user123") // Customer user IDs must be unique for each user. If you hardcode the parameter value, all users will be considered as one.
    .build();
```
</TabItem>
</Tabs>

### 退出登录用户 \{#log-users-out\}

如果您有用于用户退出登录的按钮，请使用 `logout` 方法。

:::important
退出登录会为用户创建一个新的匿名用户画像。
:::

<Tabs groupId="current-os" queryString>
<TabItem value="kotlin" label="Kotlin" default>

```kotlin showLineNumbers
Adapty.logout { error ->
    if (error == null) {
        // successful logout
    }
}
```

</TabItem>
<TabItem value="java" label="Java" default>
```java showLineNumbers
Adapty.logout(error -> {
    if (error == null) {
        // successful logout
    }
});
```
</TabItem>
</Tabs>

:::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`](android-check-subscription-status)，或[监听用户画像更新](android-check-subscription-status)以便数据自动同步。

## 后续步骤 \{#next-steps\}

恭喜！您已在应用中实现了应用内支付逻辑！祝您的应用变现一切顺利！

为了从 Adapty 中获取更多价值，您可以探索以下主题：
- [**测试**](troubleshooting-test-purchases)：确保一切按预期运行
- [**用户引导**](android-onboardings)：通过用户引导吸引用户并提升留存率
- [**集成**](configuration)：只需一行代码即可与营销归因和分析服务集成
- [**设置自定义用户画像属性**](android-setting-user-attributes)：为用户画像添加自定义属性并创建市场细分，以便针对不同用户发起 A/B 测试或展示不同付费墙