You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oreo(API 26)应用后台/关闭状态下无法接收通知求助

嘿,我之前也踩过这个一模一样的坑!API 26+引入通知渠道后,后台或者应用被杀死状态下收不到通知的问题,多半是消息类型、渠道配置或者厂商限制这几个地方出了问题,咱们一步步来排查解决:

先搞清楚你发的是哪种推送消息(核心!)

Android O及以上版本,后台/杀死状态下,普通通知消息和数据消息的处理逻辑完全不同:

  • 如果是普通通知消息(payload里带notification字段):系统会自动帮你展示通知,但前提是你的通知渠道配置完全合规,而且没被用户禁用。
  • 如果是数据消息(payload只有data字段):后台/杀死状态下系统不会自动弹通知,必须你自己在FirebaseMessagingService的onMessageReceived方法里手动构建并弹出通知,但这个方法只有当消息的priority设为high(Android端)或者content-available: true(兼容iOS)时,才会在后台触发。
检查通知渠道的细节(别以为配置了就没问题)

你说已经按文档配置了渠道,但可能有这些小疏漏:

  • 确保创建通知时指定了正确的渠道ID,而且渠道的重要性(importance)不能太低,至少要设为NotificationManager.IMPORTANCE_DEFAULT或更高,不然后台通知很可能被系统过滤掉。
    给你个靠谱的示例代码:
    // 创建通知渠道
    val channel = NotificationChannel(CHANNEL_ID, "我的通知渠道", NotificationManager.IMPORTANCE_DEFAULT).apply {
        description = "接收应用推送通知"
    }
    // 注册渠道到系统
    val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
    notificationManager.createNotificationChannel(channel)
    
  • 别忘了检查用户是不是在系统设置里禁用了你的应用通知渠道,甚至整个应用的通知权限。可以引导用户去「设置 -> 应用和通知 -> 你的应用 -> 通知」里确认一下。
数据消息的后台处理要点

如果你的推送是数据消息,那必须做好这几点:

  1. 在自定义的FirebaseMessagingService的onMessageReceived方法里,手动构建通知并调用NotificationManager显示。
  2. 服务器端发送消息时,一定要设置高优先级:
    • 用FCM的话,payload要加"priority": "high",示例如下:
      {
        "to": "目标设备的令牌",
        "data": {
          "title": "新消息提醒",
          "content": "这是一条测试数据消息"
        },
        "priority": "high"
      }
      
  3. 注意!部分国产ROM(小米、华为、OPPO这些)会在应用被杀死后限制后台服务启动,这时候你只能引导用户把应用加入「自启动白名单」或者「电池优化豁免列表」,这个是厂商的系统限制,没办法通过代码彻底解决,只能做友好提示。
检查Manifest和权限配置
  • API 33及以上版本,必须在Manifest里声明POST_NOTIFICATIONS权限:
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
    
  • 确认FirebaseMessagingService的Manifest声明正确,别漏了intent-filter:
    <service
        android:name=".MyFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    
测试小技巧
  • 用FCM控制台测试时,选「高级选项」,分别测试「通知消息」和「数据消息」两种类型,别混在一起测。
  • 测试杀死状态时,别用Android Studio的「停止运行」按钮,手动在最近任务栏划掉应用再发推送,因为前者是强制终止进程,和用户手动杀死的状态不一样。

内容的提问来源于stack exchange,提问作者Vinu Polly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:06:36