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

Jam*_*s J 5 notifications android payload firebase firebase-cloud-messaging

我们有一个后端服务器,可以向 Android 和 iOS 设备发送带有数据负载的 FCM 推送通知。我正在开发 Android 应用程序。当应用程序在前台时,会调用 onMessageReceived 并且可以从 RemoteMessage 检索数据。当应用程序在后台时,会发布系统通知。用户单击此按钮,可从 Intent extras 中检索数据。一切都很好。

我试图弄清楚如何处理在应用程序处于后台或死机时传入多个通知的情况。所需的行为是“吸收”任何活动通知并能够检索其数据有效负载。我可以使用 NotificationManager (API >= 23) 或实现 NotificationListenerService 来获取和清除(取消)活动通知。我一直无法找到一种方法来获取与它们关联的数据有效负载。StatusBarNotification.getNotification().extras 看起来很有希望,但不包含数据。我什至使用 Android Studio 调试器来检查从 getActiveNotifications() 返回的通知,但没有发现任何内容。

我认为根据我的研究,“正确”的答案是为 iOS 推送发送“通知”部分,但为 Android 推送(即仅数据)省略它,然后当我的应用程序在设备上本地发布我自己的通知不在前台。然后 onMessageReceived 应该总是被调用,我可以保存数据有效负载并完全控制。但是,我不确定此时我们是否可以更改后端服务器以支持拆分的 Android/iOS 路径。从我读过的内容来看,如果应用程序被终止,我担心某些设备上不会调用该服务。

那么,有没有人知道检索其他活动通知的数据负载的方法?或者有其他方法可以在不需要后端服务器更改的情况下解决这个问题?

谢谢!

Die*_*ini 2

根据我的研究,我认为“正确”的答案是发送 iOS 推送的“通知”部分,但对于 Android 推送则省略它(即仅数据),然后当我的应用程序在设备上本地发布我自己的通知时不在前台。然后 onMessageReceived 应该总是被调用,我可以保存数据有效负载并拥有完全的控制权。

这是正确的做法。(目前唯一可用)

但是,我不确定此时我们是否可以更改后端服务器以支持分离的 Android/iOS 路径。

我们正在努力改进 API 以更好地支持您的用例。
不幸的是,我无法分享这项工作的预计到达时间。

据我所知,我担心如果应用程序被终止,某些设备上不会调用该服务。

这些设备不会接收到notification-messages:( 。
这些设备甚至不会接收 AlarmManager 事件,也不会系统广播。
如果您遇到此类设备,请联系制造商,让他们知道它们的行为不标准,并且会破坏您的应用程序。