我在Google和StackOverflow中进行了大量搜索,以寻找解决此问题的方法。真的没有用。
我写了一个短信Android应用。我使用FCM仅数据通知,因此始终调用onMessageReceived
的方法FirebaseMessagingService
(应用程序位于前台,后台或从最近的应用程序托盘中终止)。我使用这种方法手动为新消息构造Android通知。一切工作正常:始终调用该方法。当Android 8(Oreo)发布时,我添加了通知频道,并且运行正常。但是...
出于某些奇怪的原因,在某些Android设备(主要是华硕和一些华为)上,当从最近的应用程序托盘中删除该应用程序时,不会调用此方法。当应用程序位于前台或后台(但未终止)时,它可以正常工作。我向该方法添加了一些日志消息,当应用程序被杀死(从应用程序托盘中删除,而不是强制停止)时,它们永远不会出现。其他应用程序(如WhatsApp)在这些设备上也可以正常工作(当它们从托盘中取出时会显示通知)。
有些人谈论一些中国移动构造商在其“低端”模型中实现的“优化”技术,尽管硬件(RAM,CPU)规格较低,但仍具有良好的性能。他们说,采用这种技术时,从最近的应用程序托盘中删除应用程序以释放更多的RAM时,该应用程序将被强制停止。我不确定这是否正确。
我的问题是:
如果这是正确的,该怎么做才能将该应用列入白名单?即我想告诉手机不要在我的应用程序中使用此技术。
如果这不正确,我的问题的原因和解决方案是什么?他们是如何在WhatsApp和Viber中做到这一点的?
请注意,我不想在我的FCM消息中添加“通知”部分。我需要一直使用“ onMessageReceived”方法手动设置通知的格式。我为通知使用了不同的Android通知样式。如果我使用“通知”和“数据” FCM消息,则无法控制。