我正在使用 FCM 通知的应用程序中工作,当应用程序运行(前台或后台)时,通知会收到,但是当我从最近的应用程序中清除应用程序时,我没有收到任何通知,我正在使用 FirebaseMessagingService。所以我想创建一个服务,即使应用程序没有运行或被终止,myService 也会继续扩展 FirebaseMessaging 服务。
4 回答
当您发布-APK 不是来自 GPlay 时,我发现了这个问题的原因,一些移动公司阻止了想要自动启动应用程序的服务。您可以先从 GPlay 下载应用程序或在手机设置中为您的应用程序禁用电池优化或允许您的应用程序自动启动。
我已经尝试了一切——在我看来,没有可靠的解决方案可以防止任何服务被杀死。唯一的方法是确保将通知传递到系统托盘而不是应用程序。
FCM 通知有 2 种类型:通知消息和数据消息。
数据消息传送到系统托盘并始终显示 - 即使服务未运行。
通知消息如下所示:
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"title":"Portugal vs. Denmark",
"body":"great match!"
}
}
}
并触发 FirebaseMessagingService 的 OnMessageReceaved() 方法。许多设备(尤其是华为和小米)试图尽一切努力终止后台服务以防止电池耗尽。因此 FirebaseMessagingService 不是处理通知的最佳方式。
第二种是数据消息:
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data":{
"Nick" : "Mario",
"body" : "great match!",
"Room" : "PortugalVSDenmark"
}
}
}
此类型由系统托盘处理,因此您不需要运行任何服务来获取通知。它更方便的方法,但据我所知,它无法通过控制台实现。
您可能需要服务器 API 来发送数据消息。
阅读本文了解更多详情。
当应用程序被杀死时。您需要推送静默通知(没有通知属性的有效负载)以在FirebaseMessagingService.
您可以参考此链接:https ://firebase.google.com/docs/cloud-messaging/concept-options
您将需要使用来自 FCM 的数据消息来控制您的通知负载,通过使用数据消息,即使您的应用程序处于后台或被杀死,您的应用程序的 onMessageReceived 也会被调用,您必须自己创建一个自定义通知来显示你的有效载荷。另一方面,我在 FCM 中使用了通知消息,即使应用程序被终止,它们也会被传递。