如何通过Postman使用FCM发送推送并解决重复通知及解析异常问题
问题根因
- 你调整后的请求报文不符合FCM的官方格式规范:
data是和notification平级的顶级字段,不能嵌套在notification内部。FCM服务器虽然返回请求成功,但不会识别嵌套在notification里的data字段,也不会正常下发通知到客户端。 - 你之前收到两条重复通知的原因是:
notification和data字段同时携带了body/title等通知配置,系统会自动根据notification字段弹出一次通知,你的Flutter代码监听FCM回调时又根据data字段的内容手动弹出了第二次通知。
解决方案
第一步:修正请求报文格式
保留notification和data平级的结构,notification里只放通知展示相关的配置,data里只放你需要的自定义参数,不要重复放通知配置:
{ "to": "cu6HFvgXSCyKz5kjp..........", "notification": { "sound": "default", "body": "test body", "title": "test title", "content_available": true, "priority": "high" }, "data": { "ride_request_id": "asdfasd" } }
第二步:修正Flutter端的通知处理逻辑
使用firebase_messaging包时按场景处理,避免重复弹通知:
- 应用在后台/杀死状态:FCM会自动根据
notification字段的内容弹出系统通知,无需你手动弹通知,用户点击通知时直接从回调参数的data字段读取ride_request_id即可。 - 应用在前台状态:FCM默认不会弹出系统通知,你如果需要前台展示通知,可以从回调的
notification字段读取标题、内容,配合flutter_local_notifications包手动弹一次即可,不要读取data字段的内容重复触发通知。
验证步骤
- 用修正后的报文在Postman发起请求,确认返回成功
- 先测试后台场景:杀掉应用发请求,确认只收到1条通知,点击后能正常拿到
ride_request_id - 再测试前台场景:打开应用发请求,确认按你的需求要么不弹通知,要么只弹1次自定义通知
内容的提问来源于stack exchange,提问作者Pannam T
相关产品推荐
相关产品推荐

