FCM纯数据推送通知异常显示问题求助:部分推送莫名展示
我在Python后端使用firebase_admin库,通过FCM向移动设备推送通知,同时支持纯数据消息和带通知的消息,代码如下:
纯数据推送代码
message = messaging.MulticastMessage( data=context, tokens=tokens )
带通知的推送代码
message = messaging.MulticastMessage( data=context, notification=messaging.Notification( title=title, body=body ), tokens=tokens )
遇到的问题:纯数据推送本应不会在设备上显示,但部分纯数据推送却会被展示,部分则不会;即便采用相同发送方法、在同一设备测试,仍存在这种不一致性。
客户端逻辑误触发:检查移动端代码,确认是否在接收纯数据消息的回调(如Android的
onMessageReceived、iOS的didReceiveRemoteNotification)中,存在某些条件下主动创建系统通知的逻辑。比如当APP处于特定状态(如后台)时,客户端代码可能解析data字段内容并弹出通知,导致部分消息显示。data字段包含敏感内容:确认
context字典中是否包含title、body这类通常属于通知的字段。部分移动端FCM SDK或自定义封装的逻辑,会自动识别这些字段并生成通知,即便后端没有设置notification参数。FCM消息路由差异:当设备处于不同状态(前台/后台/锁屏)时,FCM的消息处理机制不同。比如Android后台时,纯数据消息会直接传递到
onMessageReceived,但如果客户端代码未做过滤,就可能触发通知;而前台时可能仅在APP内处理不显示,这种状态差异会导致同一设备上表现不一致。库版本或推送配置问题:检查
firebase_admin的版本,确认是否存在已知的消息类型混淆bug。同时,在Firebase控制台查看推送记录的详情,确保发送的纯数据消息确实未附带notification相关参数。重复消息或缓存问题:排查是否存在消息重复发送的情况,或者客户端缓存了之前的带通知消息,导致偶尔显示旧的通知内容。
内容的提问来源于stack exchange,提问作者daniel_shtel

