> ## 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 API 在您的应用程序或网站中实现自定义用户偏好设置中心，以管理通知主题、频率、渠道和数据隐私设置。

## 什么是偏好设置中心？

偏好设置中心是您的应用程序或网站中的一个页面，允许用户控制他们从您这里接收消息的方式和类型。有关创建偏好设置中心的更多详细信息和原因，请参阅[用户偏好设置中心指南](https://onesignal.com/blog/a-guide-to-user-preference-centers)。

本指南解释了使用 OneSignal API 在您的应用程序或网站中包含用户偏好设置中心所需的技术设置。在本指南中，我们讨论如何：

* 使用[数据标签](./add-user-data-tags)分配主题、类别和频率控制
* 收集新的沟通渠道（推送通知、邮件、短信）
* 如果用户想要退出，禁用沟通渠道
* 处理数据合规性
* 删除用户数据

## 要求

* OneSignal 的移动 SDK 版本 5+ 和/或 Web SDK 16+
* 设置[外部 ID 或别名](./users)
* OneSignal 不提供用于创建偏好设置中心布局的 API，仅提供 GET、PATCH 和 DELETE 用户和订阅的 API
  * 如果您有网站并需要简单的偏好设置中心，请尝试我们的[类别提示](./permission-requests)

### 其他推荐阅读

* [A Guide to User Preference Centers](https://onesignal.com/blog/a-guide-to-user-preference-centers)
* [Data Collected by the OneSignal SDK](./data-collected-by-the-onesignal-sdk)
* [Handling Personal Data](./handling-personal-data)

## 设置

当用户访问您的偏好设置中心时，使用 [View user](/reference/view-user) API 根据 `external_id` 或您设置的自定义别名获取该用户的 OneSignal 数据。这将为您提供用户 `properties` 和 `subscriptions`。有用的数据包括但不限于：

* `properties`：用户数据
  * `tags` - 您发送到 OneSignal 的自定义数据
  * `language` - 用户的语言代码
* `subscriptions`：消息渠道和订阅状态
  * `id` - 订阅 ID
  * `type` - `Email`、`SMS`、\*Push（`AndroidPush`、`iOSPush`、`ChromePush`、`SafariPush` 等）
  * `enabled` - `true` 表示已订阅，`false` 表示已取消订阅
  * `token` - 根据订阅类型的推送令牌、邮箱地址或电话号码

<CodeGroup>
  ```json json theme={null}
  {
    "properties": {
      "tags": {
        "finance": "1",
        "tech": "1",
        "sports": "1",
        "breaking-news": "0",
        "entertainment": "0",
        "deals": "0",
        "newsletter-frequency": "weekly",
        "customer_status": "Enterprise",
        "event": "1693411710",
        "first_name": "Jon",
        "last_name": "F"
      },
      "language": "en"
    },
    "subscriptions": [
      {
        "id": "sub_id_1",
        "type": "Email",
        "token": "email@example.com",
        "enabled": true
      },
      {
        "id": "sub_id_2",
        "type": "SMS",
        "token": "1234567890",
        "enabled": true
      },
      {
        "id": "sub_id_3",
        "type": "ChromePush",
        "token": "some_token_here",
        "enabled": true
      }
    ]
  }
  ```
</CodeGroup>

使用提供的数据按需填充偏好设置中心。

## 分配类别和频率控制

请参阅[数据标签](./add-user-data-tags)。标签是用于分段和个性化的键值对。使用字符串编码的整数或时间戳来启用基于范围的过滤。

用户可以切换兴趣（例如 `sports: 1`）或设置频率标签，如 `newsletter-frequency: weekly`。在[分段](./segmentation)或带有过滤器的 [Create notification](/reference/create-message) API 中使用此数据。

要更新标签，请调用 [Update user](/reference/update-user) API。

## 收集新的沟通渠道

检查 `subscriptions` 的类型和启用状态。仅对邮件/短信显示 `token`，不针对推送。

<Warning>
  如果您系统中存在联系信息但 OneSignal 中尚未存在，请使用您自己的
  数据库作为备用来显示。
</Warning>

### 邮件和短信更新

使用 `addEmail`、`addSms` SDK 方法或 [Create subscription](/reference/create-subscription) 和 [Update subscription](/reference/update-subscription) API。更新需要订阅 `id`。

### 推送更新

如果未启用推送，请提示用户。

* 对于移动应用：[提示推送权限](./prompt-for-push-permissions)
* 对于网页：使用[原生浏览器提示](./permission-requests)或[滑动提示](./permission-requests)

## 禁用沟通渠道

使用 [Update subscription](/reference/update-subscription) 将 `enabled` 设置为 `false`。切换到 `true` 可再次选择加入。

## 处理数据合规性

默认情况下禁止 SDK 初始化，并需要用户同意才能初始化。请参阅[处理个人数据](./handling-personal-data)。

## 删除用户数据

使用 [Delete user](/reference/delete-user) API 完全从 OneSignal 中移除用户。

***
