我正在使用 FCM(firebase 云消息传递)向 IOS 应用程序发送“自定义”数据通知。据我了解,当您希望 FCM 代表您的应用处理显示通知时,我们会使用通知消息。当您只想在您的应用程序中处理消息时,我们会使用数据消息。这是设计使然。
我面临的问题是 Device/InstandID token 对于已安装的应用程序是唯一的,而不是登录应用程序的用户。所以为了解决这个问题,我在数据中发送了预期的用户标签,这样它就变成了一条数据消息。由于应用处理数据通知,didReceiveRemoteNotification() 回调只会在应用打开时触发,并且通知只会在发送时显示,而不是在发送时立即显示。
我的问题是,我能否发送自定义数据通知消息并使其在应用程序关闭时立即显示。
这是我发送给 FCM 的负载:
{
registeration_ids : [<id_1>, <id_2>],
data : {
title : message_title,
body : message_body,
intended_user : message_user
}
}
在 android FirebaseMessagingService.onMessageReceived()
中,即使应用程序在后台也会被调用,但在 ios 中,didReceiveRemoteNotification()
仅在应用程序启动时被调用,因此不会如果您发送数据消息,将出现背景消息。
最佳答案
据我所知,目前还没有办法在 ios 端妥善解决这个问题。它在 android 端完美运行,因为应用程序在所有状态(前景、背景和关闭)下都被唤醒。
您可以发送两种消息:
由操作系统直接显示和处理的通知消息。
由应用程序处理的数据消息。
如果您添加自定义标签,它现在变成了数据消息并且必须由应用程序处理。您可以在数据消息中添加一个 content_available
标签让应用程序知道该消息,但问题是数据消息仅在应用程序处于前台时才会传递给 ios 中的应用程序(打开)或在后台(最小化)。如果用户“强制关闭”应用程序(即使启用了后台通知),数据消息将不会传递到应用程序。
解决方案是在服务器端处理预期用户,并通过维护设备 token 与用户的一对一关系来解决多用户对一个设备 token 的问题。
关于使用 FCM 的 IOS 数据通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38166203/