You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Firebase推送通知发送失败求助:侧载影响及常见问题排查

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

火山引擎 最新活动