【问题标题】:Android FCM not receiving notifications when app is removed from background从后台删除应用程序时,Android FCM 未收到通知
【发布时间】:2017-12-04 11:52:46
【问题描述】:

手机是一加3T。氧气操作系统版本为 4.1.6。当应用程序在后台但在内存中时,应用程序会收到通知。但是当应用程序不在内存中时不会收到通知,即从内存中刷出。 即使应用程序不在内存中,也会在具有 android OS 版本 4.2、5.1.1、6.0.1、7.1.1 Lineage OS 的其他设备上收到通知。

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

【问题讨论】:

  • 如果它可以在其他设备上运行,那么它听起来像是制造商在操作系统中改变的东西,所以我怀疑你能做些什么。
  • 但是 Whatsapp 和 Gmail 的通知正在工作.....除了 FirebaseMessagingService 之外,我还有一个创建通知的服务。它是 START_NOT_STICKY。尝试了 START_STICKY,但仍然没有用。我做错了吗?
  • 看我的回答here

标签: android firebase firebase-cloud-messaging


【解决方案1】:

我也遇到了同样的问题。

解决这个问题的两种方法

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方法将不会调用。即使应用程序在后台,也会显示通知。 这样做的一个缺点是 - 您不能自定义通知,因为它是由 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) }

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

这是 Vivo、Oppo、小米、华硕、一加 3 等大多数设备的问题。

根据设备制造商启用应用自动启动的步骤。

更新:

一加3和Android 8.0去掉了自动启动选项,现在你可以进入设置>电池>电池优化>(左上角三点菜单)高级优化>关闭高级优化。

【讨论】:

  • 在OnePlus 3和Android 8.0上,自动启动选项已被删除,所以现在您可以进入设置>电池>电池优化>(左上角的三个点菜单)高级优化>关闭高级优化。
  • 通知或数据哪个有效载荷是强制调用 FirebaseMessagingService 类的 onMessageReceived() 方法?你能告诉我,我在某些设备上也有同样的问题吗? @Rahul Devanavar
  • @RevathiManoharan 如果您默认从 Firebase 仪表板发送通知,它将是通知负载。您必须使用 curl 或发送自定义数据有效负载。通知有效负载有限制,它仅支持标题和描述。
【解决方案2】:

这似乎是特定设备的问题。

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

adb shell dumpsys package MY-PACKAGE | grep stopped

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

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

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

【讨论】:

  • 谢谢回复,命令我试过了,stopped = false。然而通知没有出现
  • 可能是设备具有不同类型的自定义。如果应用程序在不同的设备上运行,则意味着代码是正确的。
  • 我认为它取决于包名称,当我测试我的包名称停止 = true 并且当我添加 whatsapp 包名称停止 = false 时,如果您有任何想法,请告诉我我面临同样的问题.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多