Firebase推送通知发送失败求助:侧载影响及常见问题排查
我之前也踩过Firebase推送的不少坑,先给你明确核心疑问,再梳理最容易出问题的几个点:
关于侧载是否影响通知发送?
侧载本身不会直接导致收不到通知,但侧载包的签名与Firebase控制台配置不匹配的话,肯定会出问题。Firebase依赖应用的签名信息(SHA-1/SHA-256)来验证设备合法性,如果你侧装的是调试签名的包,而控制台只配置了发布签名的哈希值,或者反过来,设备获取的令牌会无效,推送根本无法送达。
常见导致通知无法送达的原因
签名/配置不匹配
这是最频繁出现的问题!你在Firebase控制台添加应用时提交的SHA-1/SHA-256,必须和当前安装包的签名完全一致。可以打开Logcat,搜索FirebaseInstanceId关键词,查看是否有令牌获取失败的日志,这通常是签名不匹配的信号。混淆了通知类型(数据通知 vs 通知通知)
Firebase推送分两种核心类型,处理逻辑完全不同:- 通知通知:应用后台/关闭时,系统会自动弹出通知;但应用前台运行时,必须在自定义的
FirebaseMessagingService中重写onMessageReceived方法,手动处理通知显示。 - 数据通知:无论前台还是后台,都需要你自己在
onMessageReceived中编写显示逻辑,如果没写这段代码,就算推送成功也看不到通知。
- 通知通知:应用后台/关闭时,系统会自动弹出通知;但应用前台运行时,必须在自定义的
令牌异常或未同步到后端
设备的Firebase令牌会在多种场景下变更:卸载重装应用、恢复出厂设置、应用签名变更等。如果你的后端服务器没有更新最新的令牌,推送会发送到旧令牌上,自然收不到。可以在FirebaseInstanceId.getInstance().getInstanceId()的回调中确认当前令牌是否正确,并且确保已经同步到你的服务器。权限缺失(Android 13+重点)
Android 13及以上版本,必须动态申请POST_NOTIFICATIONS权限,否则后台状态下无法接收通知。同时要确保AndroidManifest.xml中已添加必要基础权限:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WAKE_LOCK" />系统后台限制/电池优化
国内品牌手机(小米、华为、OPPO等)普遍有严格的后台管控策略,如果应用被加入电池优化名单,或者后台进程被系统杀死,Firebase的推送服务可能无法唤醒应用。建议去系统设置中关闭对应应用的电池优化,或者引导用户开启“允许后台活动”权限。Firebase控制台配置错误
检查控制台中选择的目标应用是否正确,推送的目标受众(设备令牌、主题等)是否匹配测试设备。另外,国内环境下Firebase服务可能需要特殊配置,确保设备网络能正常访问Firebase服务器。自定义MessagingService逻辑错误
如果你自定义了FirebaseMessagingService,检查onMessageReceived方法是否正确实现,有没有抛出未捕获的异常导致逻辑中断。注意不要在这个方法中执行耗时操作,否则可能被系统强制终止。
如果排查完这些还是有问题,可以把Logcat中与Firebase相关的日志贴出来,能更快定位具体问题。
内容的提问来源于stack exchange,提问作者Yd Wang




