跳转到主要内容

概述

在 OneSignal 中,用户代表拥有一个或多个消息渠道订阅(如推送通知、短信和邮件)的个人。每个用户最多可以关联 20 个订阅,并由 OneSignal ID 唯一标识。 用户最初是匿名的,直到您分配外部 ID,这样您就可以跨设备和平台跟踪他们。

用户属性

属性描述
渠道用户拥有的订阅,如推送、邮件或短信。
OneSignal IDOneSignal 为每个用户自动生成的 UUID v4。在分配外部 ID 时可能会改变。
最后会话应用交互的最新时间戳。
首次会话用户在 OneSignal 中初始创建的时间。
邮箱来自最近邮件订阅的邮箱地址。
电话来自最近短信订阅的电话号码。
IP 地址来自最近更新的订阅。
外部 ID您分配的唯一标识符,用于将用户与您的系统统一。
标签自定义元数据(例如偏好、行为)。参见数据标签
位置移动订阅的 GPS 坐标(如果启用了位置跟踪)。参见位置触发通知
时区由 SDK 设置的 IANA TZ 格式中的 timezone_id。可以通过 API 更新。
语言用户的 ISO 639-1 格式语言。可以通过 API 或 setLanguage 更新。
别名键值对,如 mixpanel_id : 1234。参见别名

OneSignal ID

OneSignal ID 是生成的内部 UUID v4,用于唯一代表用户。它在以下场景中自动创建:
  • 首次打开移动应用(或重新安装后)
  • 新的 Web 订阅
  • 通过创建用户CSV 导入创建用户/订阅
  • 清除浏览器缓存
  • 使用 OneSignal.logout 注销
一旦通过 OneSignal.login 使用外部 ID,任何与当前订阅关联的现有 OneSignal ID 都会被与该外部 ID 关联的 ID 替换。如果跨平台(推送、邮件、短信)的订阅共享相同的外部 ID,它们将在同一个 OneSignal ID 下合并。

重新分配和行为

如果用户重新安装应用或清除缓存,将创建新的 OneSignal ID 和订阅。但是,调用 OneSignal.login 会将新订阅链接回原始用户配置文件。 通过 OneSignal.User.addEmailaddSms 添加的订阅将继承当前的 OneSignal ID。 SDK 参考:

外部 ID

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

使用外部 ID 跨用户订阅跟踪用户。

您可以通过以下方式设置或移除外部 ID:
不要为外部 ID 使用占位符值,如 NANULL0-1all00000000-0000-0000-0000-000000000000

匿名用户与已识别用户

匿名用户没有外部 ID。每个订阅都被视为具有自己 OneSignal ID 的独立用户。 已识别用户在订阅中共享外部 ID,允许 OneSignal 合并他们的配置文件。

示例:匿名用户

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

示例:已识别用户

  • 使用外部 ID EIDA 的 Web 订阅:OSID1
  • 使用相同 EIDA 的应用订阅:合并到 OSID1

最佳实践

  1. 始终分配外部 ID
  2. 避免使用通用值。
  3. 使用 OneSignal.login 进行可靠识别。
  4. login 后设置其他别名

同一设备上的多个用户

当多个用户共享设备时,每次新登录都应该使用不同的外部 ID 调用 OneSignal.login。这会将 OneSignal ID 和订阅重新分配给新用户。 处理注销:
  • 调用 OneSignal.logout() → 清除外部 ID 并分配匿名 OneSignal ID
  • 可选择使用 optOut 禁用通知,重新登录时使用 optIn 重新启用

月活跃用户 (MAU)

MAU 用于计费,定义为在 30 天计费周期内有最后会话的移动订阅。这包括:
  • 首次打开您的应用的用户,通过我们的 SDK 创建移动订阅
  • 重新安装应用并再次打开的用户,通过我们的 SDK 创建另一个移动订阅
  • 通过我们的 API 导入的用户

MAU 计费示例

如果用户拥有这些订阅:
  • iOS 移动(过去 30 天内活跃)
  • Android 移动(过去 30 天内活跃)
  • Web 推送
  • 邮件
  • 短信
只有 iOS 和 Android 移动订阅计入,结果为 2 个 MAU 订阅状态对 MAU 计费无影响。

减少 MAU(例如付费墙用例)

您可以使用移动 SDK 隐私方法延迟 SDK 初始化和订阅创建。
  1. 在初始化 SDK 之前调用 setConsentRequired() – 这可以防止自动创建订阅
  2. 当准备为用户创建订阅时调用 setConsentGiven()

I