来自文档:
|thread-id
|显示通知时,系统会直观地将具有相同线程标识符的通知分组在一起。 对于远程通知,threadIdentifier 属性的值设置为此请求标头的值。string
我们的推送通知有效负载:
{
aps = {
alert = {
body = "Leeroy J asked you: Test Push Notification";
};
badge = 12;
sound = default;
"thread-id" = 9150;
};
n = "6kQ/0x6556";
r = 9150;
}
{
aps = {
alert = {
body = "Leeroy J re: Test Push Notification";
};
badge = 13;
sound = default;
"thread-id" = 9150;
};
n = "6l8/0x6582";
p = 7197;
r = 9150;
}
这是消息中心的样子:
我希望它们在视觉上与其他通知有所不同……或者当其他通知介于两者之间时将它们组合在一起。在我们的测试中,情况并非如此。
我做错了什么?还是我误解了这个功能?
apns-collapse-id
NotificationContentExtension
文档中从来没有提到您需要它们。只是它们相关。
对我来说,它开箱即用。只是 iOS 不会立即 将通知呈现为组。
thread-id
s然后突然间它开始按预期分组并工作! 🤯🤯🤯
为了进行堆叠,您需要一些通知。如果空间太大(更可能是在 iPad 上),那么就需要更多空间来开始堆叠它们。另请确保您已将通知分组设置正确设置为“自动”
thread-id
的其他用法:thread-id
的使用还有另一个目的,这在消息传递应用程序中得到了最好的解释。想想 iMessage。
didReceiveNotification
将继续被呼叫。它得到
打电话以便您可以更新对话。当您的视图控制器处于运行状态时,此方法可能会被多次调用 可见的。具体来说,当有新通知时再次调用它 到达其
值与线程标识符匹配的 通知已经显示。该方法被调用于 通知内容应用扩展的主线程。threadIdentifier
文档didReceive(_:)
有关此内容的更多信息,请参阅此答案
thread-id
有两种不同的用例:
thread-id
apns-collapse-id
?如果您已发送通知并且需要更正/更新,则使用。例如,您是《华盛顿邮报》,某人刚刚赢得了总统职位。
您首先发送一条标题为“Albert Bori 赢得 2020 年选举!!”的通知正文为:此消息将很快更新...
然后 3 分钟后,您获得更多信息,他赢得了选举,在 40 个州获胜,在 10 个州落败。因此您更新了正文。然后您可以获得有关确切票数的更多信息。所以你再次更新身体。我相信可以不断更新消息而不会提醒(没有声音,也没有新的横幅。它只会在通知中心更新)更新的用户。
仅当用户已经取消/查看通知时,具有相同
apns-collapse-id
的通知才会提醒/通知用户。这不是为了分组而是为了合并!
不幸的是,你不能免费得到这个。您需要创建一个 Notifictation UI 扩展,并实现您自己的 UI(在本例中它是一个对话 UI),并在使用相同线程 id 接收新通知时更新 UI。
编辑:这可能不是正确的答案,请参阅此处更全面的答案。
请注意,
thread-id
类型必须是字符串,并且在您的有效负载中它是整数。它开箱即用。
我在 Firebase 不使用 apns-collapse-id 时遇到了这个问题。我的解决方法是使用密钥而不是证书。您可以在developer.apple.com 的证书下方找到密钥。现在,它使用一“行”通知,并将组中的最后一个通知放入该行。替换内容等高级功能需要使用通知 ui 扩展。