从活动通知中检索FCM数据负载

5
我们有一个后端服务器,向Android和iOS设备发送带有数据有效载荷的FCM推送通知。我正在开发Android应用程序。当应用程序在前台时,onMessageReceived被调用,并且可以从RemoteMessage中检索到数据。当应用程序在后台时,会发布系统通知。用户点击此通知,数据可以从Intent extras中检索到。一切正常。
我正在尝试解决的问题是当应用程序在后台或关闭时,多个通知同时到达的情况下如何处理。期望的行为是“吸入”任何活动通知并能够检索其数据有效载荷。我可以使用NotificationManager(API >=23)获取并清除(取消)活动通知,或实现NotificationListenerService。但我无法找到一种方法来获取与它们关联的数据有效载荷。StatusBarNotification.getNotification().extras似乎很有希望,但其中不包含数据。我甚至使用Android Studio调试器检查了从getActiveNotifications()返回的通知,但没有找到任何内容。
根据我的研究,我认为“正确”的答案是针对iOS推送发送“通知”部分,但在Android推送中省略它(即仅使用数据),然后在我的应用程序不在前台时在设备上本地发布自己的通知。然后,onMessageReceived应该始终被调用,我可以保存数据有效载荷并完全控制。但是,我不确定我们是否可以更改后端服务器以支持Android / iOS路径的拆分。而且从我读到的内容来看,如果应用程序被杀死,则存在某些设备上服务未被调用的问题。
因此,有没有人知道如何检索其他活动通知的数据有效载荷?或者有没有其他方法可以在不需要后端服务器更改的情况下进行操作?
谢谢!
1个回答

2
根据我的研究,“正确”的做法是对于iOS推送发送“通知”部分,但对于Android推送则省略它(即仅发送数据)。在我的应用程序不在前台时,我会在设备本地发布自己的通知。这样,onMessageReceived应该总是被调用,我可以保存数据有效载荷并完全控制它们。这是正确的方法(目前唯一可用的方法)。
然而,我不确定我们是否可以更改后端服务器以支持此类Android/iOS路径。
我们正在努力改进API以更好地支持您的用例。很遗憾,我无法分享完成此工作的时间表。
从我所读的内容中,我对服务未在某些设备上被调用存在担忧,如果应用程序被杀死,则这些设备也不会收到通知消息。这些设备甚至不接收AlarmManager事件和系统广播。如果您遇到此类设备,请联系制造商并让他们知道他们的行为不符合标准,并且正在破坏您的应用程序。

谢谢您的回复!我之前有所担心。我期待着扩展的API。 - James J
1
@Diego 上面的答案仍然是唯一的方法吗? - Gleno
1
有没有任何改进支持所描述的用例? - Lubbo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接