You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure通知中心识别用户与注册设备的关联关系(含Apple原生通知)

在Azure通知中心关联用户与设备注册的解决方案

为什么GetAllRegistrationsAsync返回结果不含用户信息?

默认的设备注册不会自动关联用户标识,你需要在注册设备时主动添加用户相关的标识信息,才能在后续查询中关联用户与设备。

关联用户与设备注册的两种核心方法

1. 使用标签(Tags)存储用户唯一ID

标签是Azure通知中心用来筛选目标设备的常用方式,你可以将用户ID作为标签绑定到设备注册上:

// 注册Apple设备时绑定用户ID标签
var appleRegistration = new AppleRegistrationDescription(appleDeviceToken);
// 用固定前缀区分用户标签,避免冲突
appleRegistration.Tags.Add($"userId:{userUniqueId}");
await _hubClient.CreateOrUpdateRegistrationAsync(appleRegistration);

后续查询时:

  • 按用户查设备:调用GetRegistrationsByTagAsync($"userId:{userUniqueId}", 0)获取该用户的所有设备注册
  • 按设备查用户:遍历GetAllRegistrationsAsync返回的结果,解析每个注册的标签,提取带userId:前缀的内容

2. 使用自定义属性(Custom Properties)存储用户信息

如果需要更清晰的字段区分,可使用注册对象的CustomProperties字典存储用户ID:

var appleRegistration = new AppleRegistrationDescription(appleDeviceToken);
appleRegistration.CustomProperties["UserId"] = userUniqueId;
await _hubClient.CreateOrUpdateRegistrationAsync(appleRegistration);

此时调用GetAllRegistrationsAsync(0)后,就能从每个注册对象的CustomProperties["UserId"]中获取对应的用户ID。

Apple原生通知的设备-用户对应查询

Apple的APNs设备令牌是设备的唯一标识,结合上述绑定方式,可实现双向查询:

  • 已知用户ID查设备:使用GetRegistrationsByTagAsync($"userId:{userUniqueId}", 0),筛选出该用户的所有Apple设备注册,从中提取设备令牌
  • 已知设备令牌查用户:调用GetRegistrationByTokenAsync(appleDeviceToken)获取对应的注册记录,再从标签或CustomProperties中提取用户ID

补充:补全现有注册的用户信息

如果之前的设备注册未绑定用户标识,你需要:

  1. 从你的业务系统中导出设备令牌与用户ID的对应关系(通常APP端在注册设备时会上报用户ID到后端)
  2. 遍历现有注册记录,调用CreateOrUpdateRegistrationAsync更新每个注册的标签或自定义属性

内容的提问来源于stack exchange,提问作者ru_2112

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 03:52:11