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

应用完全退出后无法接收FCM推送通知的问题求助

解决FCM推送在应用彻底关闭后无法接收的问题?

我之前也踩过这个坑,折腾了好一阵子才捋清楚原因,下面分享几个亲测有效的排查点和解决方案:

1. 先搞定安卓厂商的后台限制!

这是最常见的原因——国产安卓厂商(小米、华为、OPPO、vivo这些)都有自己的后台杀进程机制,应用从最近列表移除后,直接被系统“斩草除根”,FCM的推送服务自然没法运行。

  • 操作步骤(不同厂商略有差异):
    • 把你的应用加入后台保护白名单(小米叫“自启动管理”,华为是“受保护的应用”,OPPO叫“后台冻结”里设为允许)
    • 关闭应用的“智能省电”“省电模式”,避免系统为了省电主动杀死进程
    • 有些机型还要关闭“一键清理”时的自动排除,确保清理时不会把你的应用干掉

2. 检查FCM消息类型和服务配置

  • 消息类型选对:
    • 如果发的是带notification标签的消息,应用彻底关闭后,系统可能不会触发你的自定义逻辑,建议改用纯data消息,然后在FirebaseMessagingServiceonMessageReceived()方法里手动创建本地通知,这样不管应用状态如何,消息都会被你的服务接收并处理
    • 要是发的是混合消息(既有notification又有data),后台状态下系统会接管通知,但彻底关闭后可能不会走到你的onMessageReceived(),所以纯data更可靠
  • 服务配置要对:
    • 确保AndroidManifest.xml里正确注册了FirebaseMessagingService,别漏了intent-filter:
      <service
          android:name=".MyFirebaseMessagingService"
          android:exported="false">
          <intent-filter>
              <action android:name="com.google.firebase.MESSAGING_EVENT" />
          </intent-filter>
      </service>
      
    • 别在FirebaseMessagingService里重写onDestroy(),也别在里面做会中断服务的操作

3. 确认设备的Google服务正常

FCM依赖Google Play服务,要是设备上没装或者版本太低,推送肯定出问题:

  • 检查设备上是否安装了Google Play服务,并更新到最新版本
  • 可以用adb命令查看FCM服务状态,确认没有异常:
    adb shell dumpsys activity services com.google.android.gms.measurement.api
    

4. 用合适的组件处理消息

安卓8.0及以上对后台服务限制很严,普通Service容易被杀死:

  • 推荐用WorkManager或者JobIntentService来处理消息接收后的逻辑,这些组件是系统调度的,即使应用被关闭,也能保证任务被执行
  • 要是必须唤醒应用,可以临时启动一个前台服务(需要在通知栏显示一个通知),但这种方式会影响用户体验,谨慎使用

总的来说,90%的情况都是厂商后台限制导致的,先把白名单搞定,再调整消息类型和服务配置,基本就能解决问题了。

内容的提问来源于stack exchange,提问作者Savin Sharma

火山引擎 最新活动