为什么Flutter中使用FCM的Data Payload无法接收通知,添加Notification Payload即可正常工作?
Flutter FCM纯Data Payload无法接收问题原因及解决方案
你当前编写的后台消息处理逻辑本身没有问题,纯Data Payload无法接收是由平台限制和请求配置错误导致的,核心原因如下:
- 安卓平台后台运行限制
安卓12及以上系统对纯Data类型的FCM消息有严格的后台唤醒限制,当应用进程被完全杀死时,谷歌服务框架默认不会投递纯Data消息,避免无效耗电。只有携带Notification Payload的高优先级通知类消息,才会被系统优先分发,唤醒对应应用处理。 - 消息优先级未正确配置
你当前的请求体未显式指定消息优先级,纯Data消息默认优先级为普通等级,系统会对这类消息做延迟、合并投递,甚至在省电模式下直接拦截。需要在请求体中显式添加高优先级配置,才能提升投递率。
正确的请求体配置示例:{ "data": {"user":"michael"}, "to": "<FCM KEY USER>", "priority": "high", "android": { "priority": "high" }, "apns": { "payload": { "aps": { "content-available": 1 } } } } - iOS平台权限限制
iOS系统默认不允许纯Data消息在应用被杀死的状态下唤醒应用,必须申请后台刷新权限,并且在APNs payload中添加content-available: 1字段,纯Data消息才能被正常投递。而携带Notification Payload的消息走系统通知展示通道,不受该限制。
注意:小米、华为等国内定制安卓系统对FCM消息有额外的省电拦截策略,即使配置了高优先级,纯Data消息也可能被系统拦截,需要针对国内ROM做额外的推送适配。
内容的提问来源于stack exchange,提问作者Michael Fernando
相关产品推荐
相关产品推荐

