# 用户 (User ID)

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

## 用户和设备是如何关联的？

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

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

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

<img src="/pushwoosh-knowledge-hub-users-userids-1.webp" alt="展示 User ID 与多个具有唯一 HWID 的设备之间关系的图表"/>

<Aside type="note">
Pushwoosh 支持[将多个设备关联到单个 User ID](/zh/developer/first-steps/collecting-user-ids/)，无需任何额外配置。只需使用相同的 User ID 注册每个设备，它们就会自动分组到一个用户配置文件下。

有关如何执行此操作的分步说明，请参阅[设置自定义 User ID 并将其关联到多个设备](/zh/developer/first-steps/collecting-user-ids/)。
</Aside>

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

每个用户最多可以有 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-sdk-method) 方法，设置任何所需的值以将设备与特定用户关联。当用户登出时，您可以通过另一次 [`setUserID`](/zh/developer/first-steps/collecting-user-ids/#setuserid-sdk-method) 调用将此值重置为默认值，例如重置为初始的 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 控制面板创建用户特定标签，请在添加新标签时勾选 **User-specific** 复选框。如果您不将标签标记为用户特定，它将仅与设备关联。

<img src="/pushwoosh-knowledge-hub-users-userids-2.webp" alt="在 Pushwoosh 控制面板中创建新标签时的“用户特定”复选框选项"/>

## 管理用户转换

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

### 从匿名用户到已知用户的转换

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

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

### 从一个已知用户到另一个已知用户的转换

如果使用 Pushwoosh SDK 中的 [`setUserID`](/zh/developer/first-steps/collecting-user-ids/#setuserid-sdk-method) 更改了与设备关联的用户，该设备将与新的用户个人资料关联。

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

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

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

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

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

Pushwoosh 提供了几种 API 方法来管理您应用内的用户。您需要开发团队的协助才能使用这些方法。有关更多详细信息，请与您的开发团队分享[此链接](/zh/developer/pushwoosh-knowledge-hub/users-userids/#api-methods-for-managing-users)。


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

<Aside type="caution">
默认情况下，一个用户不能同时两次处于同一个旅程中。如果用户在已经参与旅程的情况下触发了进入条件，他们将不会被重新进入，直到他们完成或退出当前旅程。

Customer Journey 基于 User ID 运行。如果一个 User ID 关联了多个设备或联系人，当该用户已在旅程中时，这些设备或联系人都不能重新进入该旅程。

如果您希望用户多次进入同一个旅程，例如用于重复购买或预订，请启用[多次会话设置](/zh/product/customer-journey/journey-elements/entry-elements/trigger-based-entry/#control-how-many-sessions-a-user-can-have-at-the-same-time)并定义一个会话标识符（如 `order_id` 或 `appointment_id`）。
</Aside>
当一个用户有多个设备关联到其账户时，消息如何在这些设备间传递取决于旅程类型：

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

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

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

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

### 发送到所有设备

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

<img src="/pushwoosh-knowledge-hub-users-userids-3.webp" alt="消息设置中“选项”部分下的“发送到所有用户设备”切换选项"/>

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