更新已传递的通知 ios 10

Posted

技术标签:

【中文标题】更新已传递的通知 ios 10【英文标题】:Updating a delivered notifications ios 10 【发布时间】:2017-04-18 03:39:54 【问题描述】:

我正在尝试更新 ios 10 上已发送的通知,这是一项新功能。我正在使用 api 调用通过 firebase 发送推送通知。

如果上线通知应该是“a is online” 如果 b 也上线通知的消息应更新为“a 和 b 在线” 如果 c 也上线通知的消息应更新为“a,b 和 c 在线” 等等..

我已经使用了这个问题的答案How can I removed previously delivered notifications when a new notification arrives with UNUserNotificationCenterDelegate in iOS 10?。 每当我的后端发送通知时,我都会在 willPresentNotification 中编写一个逻辑来获取所需的确切消息并更新现有的通知消息。

但它仅在应用程序处于前台或后台时才有效。如果应用程序被终止,那么前端就没有任何东西可以执行来更新通知消息。所以每次后端发送一个通知

我收到“a 在线”、“b 在线”和“c 在线”所有单独的通知。

那么,如何从后端获得所需的行为?我是否必须将我推送的通知的标识符保存在数据库中并使用它们远程更新消息? iOS是否甚至允许后端服务器从远程设备的通知中心获取通知详细信息?如果我们使用来自后端的标识符,它会相应地更新消息吗??

谢谢

【问题讨论】:

【参考方案1】:

每次您创建更新通知...只需使用相同identifier。有关更多信息,请参阅moment 的 WWDC 视频。

以上答案适用于本地通知,但您正在寻找远程通知...

仍然看到相同的时刻来获得这个想法...唯一的区别是,对于本地通知,您有 identifier...对于远程通知,您有 apns-collapse-id 标头:

所以只要给apns-collapse-id一个值,每次你发送一个新的,它都会更新前一个。显然,如果用户在应用程序中,那么您就不走运了,因为他们已经收到了通知。这仅在用户尚未打开通知(也不在应用程序中)时才有效。如果他们已打开它,则会发送 new 通知。

apns-collapse-id

显示多个具有相同collapse identifier 的通知 作为单个通知发送给用户。此键的值不得 超过 64 个字节。如需更多信息,请参阅Quality of Service, Store-and-Forward, and Coalesced Notifications。

From Apple docs:

要允许合并*类似的通知,您可以包含 通知请求中的折叠标识符。通常,当一个 设备在线,您向 APNs 发送的每个通知请求 导致向设备发送通知。然而,当 apns-collapse-id 键存在于您的 HTTP/2 请求标头、APN 中 合并该键的值相同的请求。例如, 两次发送相同标题的新闻服务可以使用相同的 两个请求的折叠标识符值。然后 APN 将合并 将这两个请求合并为一个通知以传递给 设备。有关apns-collapse-id 键的详细信息。


*:聚在一起形成一个整体

【讨论】:

所以,你的意思是从后端,在我们第二次发送的任何有效负载中,我们可以添加标识符标签并自动更新设备上的现有通知??

以上是关于更新已传递的通知 ios 10的主要内容,如果未能解决你的问题,请参考以下文章

iOS 应用更新通知

iOS 中的推送通知突然无法通过 Firebase 传递

如何使用 Quickblox IOS 更新已发送和已接收消息的读取和传递状态?

Xcode 8.3 Swift 3 FCM 通知上的 Firebase 问题 iOS 10.3 不起作用

Phonegap : iOS 和 Android 应用更新通知

如何使用 PHP 中的推送通知更新 Apple Wallet 通行证