Firebase 静默通知丢失 (iOS)

Posted

技术标签:

【中文标题】Firebase 静默通知丢失 (iOS)【英文标题】:Firebase silent notification lose (iOS) 【发布时间】:2020-03-09 03:34:35 【问题描述】:

我使用 FCM 进行带有静默通知的主题消息传递。

我有安卓和ios应用。

这是我在 php 中使用的示例 JSON

 
  "to" : "/topics/mytopic",
  "priority": "high",
  "content_available": true,
  "data" : 
     "<key>" : "<string>",
     "<key2>" : "<string>"
 

我用android和iOS订阅了相同的主题,然后发送给两者。

iOS 部分总是丢失一些消息

前:

发送 10 条消息

机器人:10

iOS:8

我在网上搜索过,只有在电池电量低于 20% 时才会发现消息丢失。

(我测试了这种行为,它确实发生过,但与我的案例无关。在我的测试案例中,我的电池电量总是很高)

我有一些问题,有人可以帮助我吗?

    还有其他可能导致消息丢失的情况吗?

    是否有任何代码丢失并需要检查? (例如:iOS 部分)

    或者丢失一些消息是正常的,FCM不保证100%发送

【问题讨论】:

此页面建议 Apple 将要求较低的背景/静默通知优先级:onesignal.com/blog/… 所以您可以尝试降低优先级,看看是否有区别。 我改变了优先级,好像没有效果。但是感谢您提供的 URL,我在标题部分添加了 apns-push-type。我现在可以在 iOS 中收到所有关于我的测试的消息了! 【参考方案1】:

Firebase 不保证在 iOS 中使用 content-available 传递静默通知。

根据 firebase documentation 的内容可用,

"请注意,APNs 中的静默通知不保证会送达,并且可能取决于用户打开低功耗模式、强制退出应用等因素。在 Android 上,默认情况下数据消息会唤醒应用。 "

这是我认为可能对您有用的解决方法。

对于您的 iOS 设备,发送一个通知负载,其中 mutable_content 为 true、一个虚拟通知对象和数据对象中的某种标志,表明这是一个静默通知(类似于 isSilentNotif=true)。

现在编写一个扩展 UNNotificationServiceExtension 的通知服务。在向用户显示通知之前,您将获得通知服务的控制权。在此处检查您包含的标志 (isSilentNotif),如果标志为真,则以编程方式隐藏通知,并在此处执行您想要执行的后台操作。

【讨论】:

由于内容可用,APN 中的静默通知在某些情况下不能保证在 iOS 中传递。所以加上mutable_content,不会是静默通知,会提高IOS的发送速率。我的理解正确吗? 对不起,我不明白你说的“会提高IOS的发送率”是什么意思。 哦,这意味着它在解决方法后不会丢失一些消息。 提高发送接收率 是的,我相信使用“priority”中包含的通知对象发送推送消息:“high”会提高发送接收率。

以上是关于Firebase 静默通知丢失 (iOS)的主要内容,如果未能解决你的问题,请参考以下文章

当该应用的通知关闭时,在 Android 上接收 Firebase 静默通知

未收到 Flutter FCM IOS 静默(仅数据)通知

静默推送通知。 iOS

Nodejs 静默推送通知在 iOS 13 中不起作用

使用firebase发送静默推送通知,以便在应用程序被杀死时唤醒它

如果应用程序被杀死,则使用 firebase 发送静默推送通知以唤醒应用程序