单设备多用户场景下如何基于FCM Token给指定用户推送通知?
解决FCM向单个用户(而非设备)推送通知的方案
后端维护用户-设备-Token的活跃关联
后端需新增关联数据表,核心字段包括:用户ID、FCM Token、设备UUID(区分同一用户的不同设备)、活跃状态(布尔值)。- 用户登录时:客户端上传用户ID、当前设备UUID、FCM Token,后端将该关联标记为活跃;若该Token已关联其他用户,同步将其他用户的对应关联标记为非活跃(同一设备同一时间仅保留一个活跃用户关联)。
- 用户登出时:客户端通知后端,将该用户在当前设备上的Token关联标记为非活跃。
客户端同步Token状态
- 登录/登出操作完成后,立即向后端同步当前Token的关联状态。
- 监听FCM Token刷新事件,一旦Token更新,马上将新Token、当前登录用户ID、设备UUID同步到后端,更新对应关联记录。
调整推送逻辑
当需要给指定用户推送通知时,后端先查询该用户所有活跃状态的Token关联记录,再针对这些Token逐个发送FCM请求。客户端通知校验(兜底机制)
在FCM请求的data字段中加入target_user_id(目标用户的唯一标识)。客户端收到通知后,先对比当前登录用户ID与target_user_id:- 匹配则展示通知;
- 不匹配则直接丢弃,不展示。
修改后的FCM请求示例
{ "to": "目标活跃FCM Token", "notification": { "title": "新消息提醒", "body": "你有一条未读消息", "mutable_content": true, "sound": "Tri-tone" }, "data": { "url": "Hello", "dl": "<deeplink action on tap of notification>", "target_user_id": "user_123456" } }
内容的提问来源于stack exchange,提问作者SinaMN75
相关产品推荐
相关产品推荐

