# 设置自定义 User ID 并将其关联到多个设备

为了在所有平台和设备上实现无缝、个性化的通信，为每个用户分配一个自定义 User ID 至关重要。

## 什么是 User ID？

User ID 是分配给每个用户的唯一标识符。一个 User ID 可以关联到多个设备，其中每种联系方式（移动应用、电子邮件地址、电话号码）都[被视为一个独立的设备](/zh/product/pushwoosh-knowledge-hub/omnichannel-campaigns/#understanding-how-pushwoosh-handles-devices)。

将所有设备（联系方式）关联到一个 User ID 下，可以帮助您跨渠道触达用户，并在[全渠道营销活动](/zh/product/pushwoosh-knowledge-hub/omnichannel-campaigns/)中协调消息传递。

<Aside type="note">
每个用户最多可以有 **20 个设备**关联到其 User ID。如果注册的新设备超出此限制，最旧的非活跃设备将被自动移除。[了解更多](/zh/developer/pushwoosh-knowledge-hub/users-userids/#device-limit-per-user)
</Aside>

> 有关 User ID 工作原理及其与设备关系的详细说明，请参阅[本指南](/zh/developer/pushwoosh-knowledge-hub/users-userids/)。

## 为什么需要设置自定义 User ID

默认情况下，当您的应用首次启动时，Pushwoosh 会创建一个与设备硬件 ID (HWID) 相等的 User ID。这意味着每个设备都被视为一个独立的用户。因此，如果一个人使用多个设备（如一部手机和一台平板电脑），Pushwoosh 会将他们视为两个独立的用户，他们的数据也不会被关联起来。

如果您希望 Pushwoosh 将多个设备识别为属于同一个用户，您需要设置一个自定义 User ID，并将其分配给该用户的所有设备。

这样做可以将所有设备和联系方式关联到单个用户个人资料下，从而带来几个重要的好处：

### 准确的用户计数以用于计费

Pushwoosh 根据您数据库中的独立用户数量进行收费。

> [了解更多关于 Pushwoosh 定价的信息](https://pushwoosh.com/pricing)

如果您不设置自定义 User ID，每个设备都会被计为一个独立的用户，即使它们属于同一个人。例如，如果一个用户同时使用手机和平板电脑，他们可能会被计为两个用户。

### 跨渠道的一致消息传递

为了在推送通知、电子邮件、短信、应用内消息、WhatsApp 和其他渠道上提供统一的体验，所有用户数据都必须关联到单个 User ID 下。

通过设置自定义 User ID，您可以确保 Pushwoosh 将所有联系方式（设备、电子邮件、电话号码）识别为属于同一个用户，这对于实现一致且个性化的全渠道营销活动至关重要。

> 了解更多关于[全渠道营销活动](/zh/product/pushwoosh-knowledge-hub/omnichannel-campaigns/)的信息

### 持久的用户个人资料

自定义 User ID 允许 Pushwoosh 为每个用户维护一个完整、统一的个人资料。该个人资料包括：

* 关联到同一用户的所有设备和联系信息
* Tags
* 事件历史和营销活动参与情况
* 已发送和已打开的消息

您可以在 [User Explorer](/zh/product/audience-data-and-segmentation/user-explorer/) 中查看和管理这些数据，从而帮助您实现更精准的目标定位和更好的个性化。
## 如何分配和管理 User ID

Pushwoosh 提供了多种方法来分配和管理 User ID：
### setUserID SDK 方法

默认情况下，当集成了 Pushwoosh SDK 的应用首次启动时，它会将设备的 HWID 设置为 User ID。但是，您可以根据应用的设计和用户流程，在不同的时间点设置自定义用户 ID。为此，请使用 Pushwoosh SDK 提供的 setUserId 方法。

以下是一些可以设置或更新自定义 User ID 的关键时刻：

* 用户在应用中注册时
* 用户登录时
* 用户进行购买或订阅时
* 用户与特定功能互动时等

**iOS 示例**

`[[Pushwoosh sharedInstance] setUserId:@"userId"];`

**Android 示例**

`Pushwoosh.getInstance().setUserId("testUser");`

**Web 示例**

`api.registerUser('user123');`


### 在登录和登出期间管理 User ID

当用户登出时，建议使用另一次 `setUserId` 调用将其 User ID 重置为默认值。当用户再次登录时，将 User ID 更新为该用户特定的自定义值。

如果 User ID 发生变化（例如，一个用户登出而另一个用户登录），请调用 `setUserId` 来更新与该设备关联的 User ID。这可以确保正确的 User ID 始终与设备关联，从而可以将个性化通知发送给相应的用户。

### registerEmail 或 registerEmailUser API 方法

使用 [registerEmail](/zh/developer/api-reference/email-api#registeremail) 或 [registerEmailUser](/zh/developer/api-reference/email-api#registeremailuser) API 方法将外部 User ID 与指定的电子邮件地址关联。

请注意，[registerEmailUser](/zh/developer/api-reference/email-api#registeremailuser) 不会在您的用户库中注册电子邮件地址；它仅应用于为已通过 registerEmail 请求注册的电子邮件地址分配用户 ID。

### registerDevice API 方法

虽然此方法主要用于在 Pushwoosh 中注册新设备，但它也可以在设备注册时设置 User ID。

如果您在此调用中传递一个自定义 User ID（例如，"userId": "Alex"），它将与该设备关联。如果未提供 User ID，该设备将与一个等于硬件 ID (HWID) 的匿名 User ID 关联。

要使用 [**/registerDevice**](/zh/developer/api-reference/device-api/#registerdevice) 方法将客户电话号码与 **UserId** 关联，请在 "hwid" 参数中指定电话号码。

### registerUser API 方法

此 API 方法允许您将外部 User ID 与指定设备关联，或在用户之间转移设备并保留设备标签，例如当一个用户登出而新用户登录时。

此方法可以在设备注册之前或获取推送令牌之前使用，例如，当您需要在 Pushwoosh 中预注册用户时。[了解更多](/zh/developer/api-reference/user-centric-api#registeruser)