【问题标题】:Receive all the push notifications when devices are offline设备离线时接收所有推送通知
【发布时间】:2019-03-02 12:07:34
【问题描述】:

我正在创建一个 iOS 和 Android 原生应用,使用 Firebase 发送推送通知。

它工作正常,但是当我关闭设备并发送一些通知时,在启动设备后,我只收到最后一个为 iOS 发送的消息,对于 Android 也是如此。

有没有办法在设备离线且启动时接收所有推送通知?

【问题讨论】:

  • 我也有你这样的问题。关闭 Wi-Fi 发送 5 条推送,开启 Wi-Fi 后只接收一条推送。我读到下面的答案,但我没有帮助。你是如何解决问题的?

标签: android ios firebase firebase-cloud-messaging


【解决方案1】:

引用几个参考:

iOS:

Apple 推送通知服务包括服务质量 (QoS) 执行存储转发功能的组件。如果 APNs 尝试 发送通知并且目标设备离线,APNs 将通知存储一段有限的时间并传递它 当设备再次可用时。该组件仅存储 每个设备和每个应用程序的最新通知。如果一个设备是 离线,发送针对该设备的通知请求导致 先前的请求被丢弃。如果设备保持离线状态 很长一段时间,它在 APNs 中存储的所有通知都会被丢弃。

  • 此组件仅存储每个设备和每个应用的最新通知。
  • 如果设备离线,发送针对该设备的通知请求会导致之前的请求被丢弃。

这意味着只保留一个通知,并且发送新通知会替换旧通知。所以我认为这是不可能的。

Local and Remote Notification Programming Guide

安卓:

在 Android 和 Web/JavaScript 上,您可以指定 一个消息。该值必须是从 0 到 2,419,200 秒的持续时间 (28 天),它对应于最长时间 FCM 存储并尝试传递消息。没有的请求 包含此字段默认为最长四个星期。

目前,iOS 上的通知消息不支持 time_to_live

如果设备未连接到 GCM,消息将被存储 直到建立连接(再次尊重折叠键 规则)。建立连接后,GCM 会传递所有待处理的 向设备发送消息。如果设备不再连接(对于 例如,如果它被恢复出厂设置),消息最终会计时 并从 GCM 存储中丢弃。默认超时为 4 周, 除非设置了 time_to_live 标志。

最后,当 GCM 尝试向设备传递消息时, 应用程序已卸载,GCM 将立即丢弃该消息 并使注册令牌无效。未来尝试发送 向该设备发送消息将导致 NotRegistered 错误。

  • 建立连接后,GCM 会将所有待处理消息传送到设备。
  • 如果设备不再连接(例如,恢复出厂设置),消息最终将超时并从 GCM 存储中丢弃。
  • 默认超时为 4 周,除非设置了 time_to_live 标志。
  • 最后,当 GCM 尝试向设备传递消息并且应用程序被卸载时,GCM 将立即丢弃该消息并使注册令牌无效。

意味着它应该接收待处理的消息。除非设备已恢复出厂设置或已卸载。

About FCM Messages

Messaging Concepts and Options(虽然这已被弃用,现在建议参考 FCM 消息,链接在上面)

【讨论】:

  • 我在使用“priority=normal”时测试了 android 设备的推送通知,即使设备处于睡眠状态,它们也会丢失 - 意思是仍然打开 - 并在消息发送 2 分钟后醒来。因为我想要“priority=high”,所以我的问题得到了解决,但这种行为不是我所期望的。
  • 我只收到我发送的最后一个。我尝试了折叠键和优先级,但没有任何效果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
  • 2022-12-16
相关资源
最近更新 更多