# 用户 (User ID)

User ID 是分配给每个用户的唯一标识符，用于在用户的所有设备上保持一致的用户数据。这使您能够为您的受众在他们的设备上提供无缝的用户体验。

## 用户和设备之间有何关联？

每个用户都被分配一个称为 User ID 的唯一标识符。User ID 可以关联到多个设备，使企业即使用户更换设备也能与他们保持联系。这确保了目标消息能够送达目标用户正在使用的任何设备上。

用户 (User ID) 不是一个独立的实体；它依赖于关联设备的存在。如果最后一个关联设备被移除或关联到另一个用户，该用户将自动从系统中删除。

用户 (User ID) 也作为一个实体，可以将多个设备分组在其下，每个设备都有其唯一的硬件 ID (HWID)。

<img src="/user-ids-users-userids-1.webp" alt="图表显示 User ID 与多个设备之间的关系，每个设备都有唯一的硬件 ID"/>

### 每个用户的设备限制

每个用户最多可以有 20 个设备关联到其 User ID。当第 21 个设备注册时，系统会自动移除一个现有设备以腾出空间。

**如何选择要移除的设备**

1.  如果所有关联的设备都仅为电子邮件设备，则会随机移除一个电子邮件设备。
2.  否则，系统会根据最后一次打开应用的时间找到最旧的非电子邮件设备并将其移除。
3.  如果没有活动数据可供比较（例如，设备是通过 API 添加的，没有实际的应用使用情况），则会随机移除一个非电子邮件设备。

这确保了您最近活跃的设备能保持与您的账户关联，而较旧、不活跃的设备则会被自动清理。

## 用户类型

用户分为两种类型：匿名用户和已知用户。匿名用户的 User ID 等于设备 HWID，之后可以替换为实际的 User ID。

已知用户拥有一个明确的 User ID。您可以在通过 [`/registerDevice`](/zh/developer/api-reference/device-api/#registerdevice) API 调用注册新设备时指定一个 User ID。

## 获取和管理 User ID

Pushwoosh 提供了多种访问和管理用户的方式：

### 创建用户

默认情况下，当集成了 Pushwoosh SDK 的应用首次启动时，它会将设备 HWID 设置为 User ID。您可以在登录时从 Pushwoosh SDK 调用 [`setUserID`](/zh/developer/first-steps/collecting-user-ids/) 方法，设置任何所需的值以将设备与特定用户关联。当用户登出时，您可以通过另一次 [`setUserID`](/zh/developer/first-steps/collecting-user-ids/) 调用将此值重置为默认值，例如重置为初始的 HWID 值。

### 导入用户

您可以轻松地从 CSV 文件为特定用户细分导入 User ID。请在[细分指南](/zh/product/audience-data-and-segmentation/segmentation/create-segments/by-import)中查找我们的详细说明。

### 导出用户

要导出 User ID，您可以使用 [`/exportSegment`](/zh/developer/api-reference/segmentation-filters-api/#exportsegment) API 请求，该请求提供了以 CSV 或 JSON 格式导出数据的选项。

### 从设备日志访问 User ID

User ID 也可以直接从设备日志中访问。有关分步说明，请参阅文章[如何获取控制台日志和设备令牌](https://help.pushwoosh.com/hc/en-us/articles/360000292586-How-to-obtain-console-logs-and-device-token?source=search\&auth_token=eyJhbGciOiJIUzI1NiJ9.eyJhY2NvdW50X2lkIjoyOTA5MjksInVzZXJfaWQiOjEyNDkzMTI5MDkwMzMzLCJ0aWNrZXRfaWQiOjc4MzMyLCJjaGFubmVsX2lkIjo2MywidHlwZSI6IlNFQVJDSCIsImV4cCI6MTY5MzExNDk5Mn0.SpeS-IJ_j3mB6Elf2ObMjev2MZSmDOLu4DYQdEcZvS8)。

## 用户和设备标签

与设备一样，用户 (User ID) 也可以拥有自己的[标签](/zh/product/audience-data-and-segmentation/user-data-tags/)集，这些标签将作为标签来根据用户的特征对用户或设备进行分类和识别。

### 如何创建用户特定标签

当您设置一个用户特定标签时，它会自动应用于用户及其所有关联设备。这意味着该标签将与用户个人资料关联，并会反映在他们的所有设备上。

要从 Pushwoosh 控制面板创建用户特定标签，请在添加新标签时勾选**用户特定**复选框。如果您没有将标签标记为用户特定，它将仅与设备关联。

<img src="/user-ids-users-userids-2.webp" alt="Pushwoosh 控制面板标签创建表单，显示用于创建用户特定标签的“用户特定”复选框选项"/>

## 管理用户转换

在 Pushwoosh 中，管理用户转换涉及两种主要场景：

### 从匿名用户转换为已知用户

当匿名用户成为已知用户时，他们正在使用的设备将与他们的新用户个人资料关联。在此转换过程中，所有设备属性保持不变。但需要注意的是，所有用户特定属性都会重置为已知用户的值，如果不存在则重置为默认值。

例如，假设一个访客用户一直在使用一个带有默认设置的健身追踪应用。当他们创建账户时，他们的设备数据保持不变。但是，任何用户特定的详细信息，如姓名、电子邮件和自定义目标，都将重置为已知用户的值。

### 从一个已知用户转换为另一个已知用户

如果使用 Pushwoosh SDK 的 **setUserID** 更改了与设备关联的用户，则该设备将与新的用户个人资料关联。

> 了解更多关于为 [Android](/zh/developer/pushwoosh-sdk/android-sdk/android-faq/#how-do-i-set-a-userid) 和 [iOS](/zh/developer/pushwoosh-sdk/ios-sdk/ios-faq/#q-how-can-i-set-a-user-id-in-pushwoosh) 设置 User ID 的信息。

您也可以使用 [`/registerUser`](/zh/developer/api-reference/user-centric-api#registeruser) API 调用。

与前一个场景一样，设备属性保持不变，确保了平滑的转换。但是，用户特定标签现在将被分配为新用户的值。这是为了确保用户的标签能准确反映新用户的个人资料。

举个例子，考虑一个视频流媒体服务中的场景。如果一个注册用户登出，而另一个不同的注册用户在同一设备上登录，设备设置（如首选语言和视频质量设置）将被保留。然而，任何用户特定的信息，如观看历史和推荐，都将更改为新用户的信息。

## 用于管理用户的 API 方法

Pushwoosh 提供了多种 API 方法来管理您应用内的用户。理解这些方法对于有效的用户数据管理和定位至关重要。以下是改变用户状态或属性的四个关键方法：

1.  [`/applicationOpen`](/zh/developer/api-reference/device-api#applicationopen)

*   如果设备和匿名用户不存在，则创建一个没有推送令牌的设备和匿名用户。
*   在设备上设置设备特定标签。
*   不处理与用户相关的更改。

2.  [`/registerDevice`](/zh/developer/api-reference/device-api#registerdevice)

*   如果设备和用户不存在，则创建一个带有推送令牌的设备和用户。
*   将设备与 API 请求中的用户关联（否则为匿名用户）。
*   将所有指定的标签分配给设备及其关联用户。

<Aside type="caution">
为防止潜在的竞态条件（即多个操作试图同时修改共享数据），请避免将 [`/registerDevice`](/zh/developer/api-reference/device-api#registerdevice) 与 [`/registerUser`](/zh/developer/api-reference/user-centric-api#registeruser) 并发使用。
</Aside>

3.  [`/registerUser`](/zh/developer/api-reference/user-centric-api#registeruser)

*   如果设备和用户不存在，则创建一个没有推送令牌的设备和用户。
*   在用户之间转移设备，同时保留设备标签。

4.  [`/setTags`](/zh/developer/api-reference/device-api#settags)

*   如果设备和匿名用户不存在，则创建一个没有推送令牌的设备和匿名用户。
*   将设备标签分配给设备。
*   将用户标签分配给请求中提供的用户（如果该用户存在）。
*   此方法不转移设备，因此不能创建新的已知用户（您可以使用 [`/registerUser`](/zh/developer/api-reference/user-centric-api/#registeruser) 方法来创建新的已知用户）。

## 如果一个用户关联了多个设备，在 Customer Journey 期间哪一个设备会收到消息？

当一个用户有多个设备与其账户关联时，消息如何在这些设备间传递取决于旅程类型：

### 基于受众进入和基于 webhook 进入的旅程

默认情况下，在这些旅程中，消息会发送到与用户关联的最近活跃的设备。这确保了消息能够送达最有可能与之互动的用户。

### 基于触发器进入的旅程

默认情况下，消息会发送到最后触发操作的设备。这通过在发生相关用户活动的设备上递送消息来保持上下文和相关性。

### 发送到所有设备

但是，您可以选择覆盖这些默认设置，将消息同时发送到与该 User ID 关联的所有设备。为此，请在消息设置中，向下滚动到**选项**，并打开**发送到所有用户设备**的开关。

<img src="/user-ids-users-userids-3.webp" alt="Customer Journey 消息设置，在“选项”部分显示“发送到所有用户设备”切换选项"/>

这个选项对于需要触达用户所有设备（无论他们当前正在使用哪个设备）的广播或紧急通知可能很有用。