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 静默通知