Firebase生成registration token的依据是什么?如何实现单用户多设备推送?
问题结论
你的假设不成立,Firebase Cloud Messaging(FCM)的registration token 不是 基于设备唯一ID生成的。
详细说明
registration token是FCM为「特定设备上的特定应用安装实例」分配的唯一标识,和设备硬件ID没有绑定关系,以下场景都会触发token变更:
- 应用被卸载后重新安装
- 用户手动清除应用本地数据
- FCM服务端主动触发token轮转
- 同一设备上同一应用切换不同账号登录(取决于你触发token获取的时机)
如果强行假设token和设备唯一ID绑定,会出现大量推送失效、用户收不到通知的问题。
单用户多设备推送实现方案
你只需要调整现有存储和业务逻辑即可,步骤如下:
- 调整存储结构
将原有「用户ID对单个token」的一对一存储,改为一对多存储,一条用户记录可以关联多个有效registration token,可选补充字段:token对应的设备名称/类型、token最后上报时间。 - 修改登录上报逻辑
用户每次登录获取到当前设备的registration token后,不要直接覆盖用户原有绑定的token:
- 先校验该token是否已经和当前用户绑定,已绑定则更新token最后上报时间即可
- 未绑定则新增一条绑定记录
- 建立无效token清理机制
调用FCM推送接口时,如果返回InvalidRegistration、NotRegistered等错误码,直接删除对应的token绑定记录;同时可定期清理超过90天无上报记录的无效token,减少存储冗余。 - 调整推送逻辑
给指定用户发推送时,拉取该用户绑定的所有有效registration token,批量提交给FCM推送接口发送即可实现多设备同步送达。
内容的提问来源于stack exchange,提问作者inktCode
相关产品推荐
相关产品推荐

