Firebase push notification设备空闲未充电时无法送达问题咨询
解决方案
- 修正FCM消息优先级配置
你当前把priority: high写在了data字段中,这属于自定义业务字段,FCM官方不会识别该参数作为消息投递优先级。需要将"priority": "high"放到和registration_ids同级的根节点下,才能触发FCM的高优先级唤醒策略,绕过Doze模式的投递限制。
修正后的请求示例核心结构如下:
{ "registration_ids": ["xxx"], "priority": "high", // 移到根节点 "data": {}, "android": {"priority": "high"}, ...其余配置保持不变 }
排查厂商定制ROM的省电限制
国产ROM(小米、华为、OPPO、vivo等)都有原生Android之外的定制省电策略,比如神隐模式、后台活动限制、自启动管控等,这类限制优先级高于系统原生的免电池优化权限。需要在对应设备的电量管理/应用管理设置中,将你的应用添加到「允许后台活动」「自启动白名单」「耗电不限制」列表中。调整消息类型
如果你的推送是纯数据(data-only)类型,Doze模式下高优先级消息的投递仍然会有概率被延迟。如果业务场景允许,建议将通知标题、内容等放到notification字段中,走FCM系统通知通道,这类消息的投递优先级远高于纯数据消息,在Doze模式下的送达率更高。验证Google Play服务状态
确认测试设备的Google Play服务为最新版本,旧版本Play服务存在Doze模式下FCM长连接唤醒异常的bug,会导致高优先级消息无法及时触达设备。本地Doze模式模拟测试
可以通过adb命令强制设备进入Doze模式快速复现问题,执行命令:
adb shell dumpsys deviceidle force-idle
执行后发送推送测试,可快速验证修复效果,不需要等待设备自然进入空闲状态。
内容的提问来源于stack exchange,提问作者Arif
相关产品推荐
相关产品推荐

