使用 FCM 的 IOS 数据通知

标签 ios iphone firebase notifications firebase-cloud-messaging

我正在使用 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/

相关文章:

java - Firebase,删除用户时无法删除用户记录

android - Firebase App Distribution - Google Play 窗口上没有 "install"按钮

ios - Firebase - 将所有子键和子值检索到 Swift 中的单独数组中

ios - UITableView:新行添加到顶部

ios - 分页 UIScrollView 内的 UIScrollView

ios - 如果您使用 ffmpeg 旋转 iPhone 的视频,旋转信息会保留下来。我可以隐藏这个吗?

iphone - 'NSInvalidArgumentException' : unrecognized selector sent to instance 0x8d25aa0'

ios - SceneKit:将创作软件中的 3D 角色导入场景?

ios - UIPresentation Controller - 从后台返回后布局出错

ios - 标签栏问题: -[UILayoutContainerView hash]: message sent to deallocated instance