如何在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
补充:补全现有注册的用户信息
如果之前的设备注册未绑定用户标识,你需要:
- 从你的业务系统中导出设备令牌与用户ID的对应关系(通常APP端在注册设备时会上报用户ID到后端)
- 遍历现有注册记录,调用
CreateOrUpdateRegistrationAsync更新每个注册的标签或自定义属性
内容的提问来源于stack exchange,提问作者ru_2112
相关产品推荐
相关产品推荐

