> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 用户

> 了解用户在 OneSignal 中的工作方式，包括用户识别、OneSignal ID、外部 ID，以及如何跨渠道管理订阅和用户属性。

## 概述

在 OneSignal 中，**用户**代表拥有一个或多个消息渠道[订阅](./subscriptions)（如推送通知、短信和邮件）的个人。每个用户最多可以关联 20 个订阅，并由 **OneSignal ID** 唯一标识。

用户最初是**匿名的**，直到您分配**外部 ID**，这样您就可以跨设备和平台跟踪他们。

<div style={{ display: 'flex', justifyContent: 'center', margin: '2rem 0' }}>
  <iframe width="560" height="315" src="https://www.youtube.com/embed/yZM6zn7nLDw?si=oT7ncbhX0sNtmKML" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen />
</div>

***

## 用户属性

| 属性               | 描述                                                                                                                |
| ---------------- | ----------------------------------------------------------------------------------------------------------------- |
| **外部 ID**        | 您分配的唯一标识符，用于将用户与您的系统统一。                                                                                           |
| **OneSignal ID** | OneSignal 为每个用户自动生成的 UUID v4。在分配外部 ID 时可能会改变。                                                                     |
| **别名**           | 键值对，如 `mixpanel_id : 1234`。参见[别名](./aliases)。                                                                     |
| **渠道**           | 用户拥有的[订阅](./subscriptions)，如推送、邮件或短信。                                                                             |
| **国家**           | [ISO 3166-1 Alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) 格式的国家代码。                                   |
| **邮箱**           | 来自最近邮件订阅的邮箱地址。                                                                                                    |
| **首次会话**         | 用户在 OneSignal 中初始创建的时间。                                                                                           |
| **IP 地址**        | 来自最近更新的订阅。                                                                                                        |
| **语言**           | 用户的 [ISO 639-1 格式](https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes)语言。可以通过 API 或 `setLanguage` 更新。   |
| **最后会话**         | 应用交互的最新时间戳。                                                                                                       |
| **位置**           | 移动订阅的 GPS 坐标（如果启用了位置跟踪）。参见[位置触发通知](./location-triggered-event)。                                                   |
| **电话**           | 来自最近短信订阅的电话号码。                                                                                                    |
| **标签**           | 自定义元数据（例如偏好、行为）。参见[数据标签](./add-user-data-tags)。                                                                   |
| **测试用户名**        | 将用户标记为测试用户时分配的标签。可通过仪表板或 API 中的 `test_user_name` 属性设置。参见[测试订阅](./)。                                               |
| **时区**           | 由 SDK 设置的 [IANA TZ 格式](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)中的 `timezone_id`。可以通过 API 更新。 |

## OneSignal ID

**OneSignal ID** 是生成的内部 UUID v4，用于唯一代表用户。它在以下场景中自动创建：

* 首次打开移动应用（或重新安装后）
* 新的 Web 订阅
* 通过[创建用户](/reference/create-user)或[CSV 导入](./import)创建用户/订阅
* 清除浏览器缓存
* 使用 `OneSignal.logout` 注销

一旦通过 `OneSignal.login` 使用**外部 ID**，任何与当前订阅关联的现有 OneSignal ID 都会被与该外部 ID 关联的 ID 替换。如果跨平台（推送、邮件、短信）的订阅共享相同的外部 ID，它们将在同一个 OneSignal ID 下合并。

### 重新分配和行为

如果用户重新安装应用或清除缓存，将创建新的 OneSignal ID 和订阅。但是，调用 `OneSignal.login` 会将新订阅链接回原始用户配置文件。

通过 `OneSignal.User.addEmail` 或 `addSms` 添加的订阅将继承当前的 OneSignal ID。

SDK 参考：

* [移动 SDK 参考](./mobile-sdk-reference)
* [Web SDK 参考](./web-sdk-reference)

## 外部 ID

**外部 ID** 是您分配给用户的唯一字符串，用于跨设备和订阅跟踪他们。

<Frame caption="使用外部 ID 跨用户订阅跟踪用户。">
  <img src="https://mintcdn.com/onesignal/RWtLFPeffHrC81wI/images/docs/a30870df69f4545ec68fc9ff9902784b35ede0dd0ce7b3a5b03b8acb6bb1c748-eid.png?fit=max&auto=format&n=RWtLFPeffHrC81wI&q=85&s=bcb07ae72a25e91288a5034a3e0ecb17" width="560" height="452" data-path="images/docs/a30870df69f4545ec68fc9ff9902784b35ede0dd0ce7b3a5b03b8acb6bb1c748-eid.png" />
</Frame>

您可以通过以下方式设置或移除外部 ID：

* `OneSignal.login` - **推荐** 参见[移动 SDK](./mobile-sdk-reference#login-external-id)和[Web SDK](./web-sdk-reference#login-external-id)
* [创建用户](/reference/create-user)
* [创建别名（按订阅）](/reference/create-alias-by-subscription)
* [转移订阅](/reference/transfer-subscription)
* `OneSignal.logout`（移除）

<Warning>
  不要为外部 ID 使用占位符值，如 `NA`、`NULL`、`0`、`-1`、`all` 或 `00000000-0000-0000-0000-000000000000`。
</Warning>

## 匿名用户与已识别用户

**匿名用户**没有外部 ID。每个订阅都被视为具有自己 OneSignal ID 的独立用户。

**已识别用户**在订阅中共享外部 ID，允许 OneSignal 合并他们的配置文件。

### 示例：匿名用户

* 用户在 Web 上订阅：`OSID1`
* 同一用户安装应用：`OSID2`
* **结果**：两个独立的配置文件

### 示例：已识别用户

* 使用外部 ID `EIDA` 的 Web 订阅：`OSID1`
* 使用相同 `EIDA` 的应用订阅：合并到 `OSID1`

### 最佳实践

1. 始终分配**外部 ID**。
2. 避免使用通用值。
3. 使用 `OneSignal.login` 进行可靠识别。
4. 在 `login` 后设置其他[别名](./aliases)。

## 同一设备上的多个用户

当多个用户共享设备时，每次新登录都应该使用不同的外部 ID 调用 `OneSignal.login`。这会将 OneSignal ID 和订阅重新分配给新用户。

处理注销：

* 调用 `OneSignal.logout()` → 清除外部 ID 并分配匿名 OneSignal ID
* 可选择使用 `optOut` 禁用通知，重新登录时使用 `optIn` 重新启用

## 月活跃用户 (MAU)

MAU 用于**计费**，定义为在 30 天计费周期内有最后会话的移动[订阅](./subscriptions)。这包括：

* 首次打开您的应用的用户，通过我们的 SDK 创建移动订阅
* 重新安装应用并再次打开的用户，通过我们的 SDK 创建另一个移动订阅
* 通过我们的 API 导入的用户

### MAU 计费示例

如果用户拥有这些订阅：

* iOS 移动（过去 30 天内活跃）
* Android 移动（过去 30 天内活跃）
* Web 推送
* 邮件
* 短信

只有 iOS 和 Android 移动订阅计入，结果为 **2 个 MAU**。

订阅状态对 MAU 计费无影响。

### 减少 MAU（例如付费墙用例）

您可以使用移动 SDK [隐私方法](./mobile-sdk-reference#privacy)延迟 SDK 初始化和订阅创建。

1. 在初始化 SDK 之前调用 `setConsentRequired()` – 这可以防止自动创建订阅
2. 当准备为用户创建订阅时调用 `setConsentGiven()`

***
