三星A2 Android8.1.0休眠时onMessageReceived未回调推送无法接收问题
三星A2 Android 8.1.0休眠模式下FCM推送无法接收问题解决方案
你遇到的broadcast intent callback: result=CANCELLED forIntent { act=com.google.android.c2dm.intent.RECEIVE报错本质是Android原生后台限制+三星定制的电池优化策略,在应用进入休眠/打盹模式时拦截了FCM推送广播,没有转发到你的FirebaseMessagingService,因此onMessageReceived不会被触发。
解决步骤
配置三星系统白名单
打开系统「设置」-「应用」- 找到你的应用 - 进入「电池」设置页:- 关闭「优化电池使用量」开关,或者将应用添加到电池优化豁免名单
- 开启「允许后台活动」选项
- 进入三星自带的「智能管理器」,将应用添加到自启动白名单、后台运行白名单
调整FCM消息类型
不要仅发送FCM通知类型(notification)消息,改为发送**数据类型(data)**消息,或携带data字段的混合类型消息。系统休眠/打盹模式下纯通知类型消息会被系统通知栏托管,不会触发应用的onMessageReceived回调,只有数据类型消息才会回调到应用层。设置推送高优先级
服务端发送FCM推送时,将消息的priority参数设置为high,高优先级消息会临时唤醒处于休眠状态的应用进程,绕过普通打盹限制完成推送送达。完善清单文件配置
检查AndroidManifest.xml配置:- 申请
android.permission.WAKE_LOCK权限,避免服务处理推送时被系统回收 - 确认MyFirebaseMessagingService的声明配置了正确的
com.google.firebase.MESSAGING_EVENTintent-filter
- 申请
补充代码逻辑
你当前提供的代码中onNewToken方法仅调用了父类方法,需要补充新token上传到业务服务端的逻辑,避免服务端使用过期token发送推送导致送达失败。
内容的提问来源于stack exchange,提问作者Suraj
相关产品推荐
相关产品推荐

