Android FCM在从后台删除应用时未收到通知

问题描述 投票:8回答:2

这款手机是OnePlus3T。氧气OS构建为4.1.6。当应用程序在后台但在内存中处于前台时,应用程序会收到通知。但是,当应用程序不在内存中时,即在刷出内存时,不会收到通知。在具有Android OS版本4.2,5.1.1,6.0.1,7.1.1的其他设备上收到通知.Latage OS甚至应用程序不在内存中。

请提出一些建议。提前致谢。

android firebase firebase-cloud-messaging
2个回答
20
投票

我也遇到了同样的问题。

解决这个问题的两种方法

1-使用通知负载

可以使用data标记或notification标记发送通知有效负载。

使用data标签

 "data" {
  "title": "welcome",
  "description" :"to your app" ,
  "image" :"image_url",  
  "deeplink" :"deeplink",
   - -
  }

它将触发FirebaseMessagingService onMessageReceived方法。当应用程序在后台时,它将无法在某些设备上运行。

使用notification

 "notification" {
   "title":"title",
   "description" : "description",
   "click_action" :"activity to be open"
   ..
}

这是处理android系统尝试并显示通知,这种情况下你的FirebaseMessagingService的onMessageReceived方法将不会调用。甚至app将在后台显示。这样做的一个缺点是 - 你不能自定义通知,因为它是由Android系统处理的。 more info

2-在设备设置中启用自动启动

当您使用data发送通知并且应用程序被杀死时,通知将不会显示。如果你观察到日志猫,你会看到

W/GCM-DMM: broadcast intent callback: result=CANCELLED forIntent { act=com.google.android.c2dm.intent.RECEIVE pkg=com.cabipool (has extras) }

可以在oneplus 3设置中解决 - >应用程序 - >点击齿轮 - >最后一个选项应用程序选择应用程序自动启动 - >找到你的应用程序启用开关

这就是大多数设备中的问题,如Vivo,Oppo,xiaomi,Asus,一加三。

启用应用程序自动启动的步骤非常基于设备制造商。

更新:

OnePlus 3和Android 8.0自动启动选项已删除,因此您现在可以转到设置>电池>电池优化>(左上角的三点菜单)高级优化>关闭高级优化。


2
投票

这看起来像是特定设备的问题。

在您的应用关闭时(重启后或刷卡后)检查运行此命令

adb shell dumpsys package MY-PACKAGE | grep stopped

如果您可以阅读stopped=true,则表示您的设备制造商在刷卡时实施了非标准行为,包括“强制停止”应用程序。

force-stopping非常类似于禁用该应用程序,直到用户再次打开它。 当应用程序处于该状态时,许多其他Android API将无法运行! (广播,报警......)

如果这是问题,请联系制造商并要求他们修理设备!

© www.soinside.com 2019 - 2024. All rights reserved.