iOS“thread-id”不会对推送通知进行分组

问题描述 投票:0回答:5

来自文档

thread-id
|
string
|显示通知时,系统会直观地将具有相同线程标识符的通知分组在一起。 对于远程通知,threadIdentifier 属性的值设置为此请求标头的值。

我们的推送通知有效负载:

{
    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;
}

这是消息中心的样子:

我希望它们在视觉上与其他通知有所不同……或者当其他通知介于两者之间时将它们组合在一起。在我们的测试中,情况并非如此。

我做错了什么?还是我误解了这个功能?

ios push-notification apple-push-notifications thread-id
5个回答
24
投票

你不需要:

  • apns-collapse-id
  • NotificationContentExtension

文档中从来没有提到您需要它们。只是它们相关

解决方案:

对我来说,它开箱即用。只是 iOS 不会立即 将通知呈现为组。

  1. 使用
    thread-id
    s
  2. 发送通知
  3. 然后等待。让您的 iPhone/iPad 锁定屏幕关闭。 (我的被锁了)。
  4. 然后再发送一条消息
  5. 如果这不起作用,请稍等一下,然后再试一次。

然后突然间它开始按预期分组并工作! 🤯🤯🤯

为了进行堆叠,您需要一些通知。如果空间太大(更可能是在 iPad 上),那么就需要更多空间来开始堆叠它们。另请确保您已将通知分组设置正确设置为“自动”

thread-id
的其他用法:

thread-id
的使用还有另一个目的,这在消息传递应用程序中得到了最好的解释。想想 iMessage。

  1. 您收到朋友发来的消息。
  2. 您长按通知。
  3. 它将打开一个弹出窗口,您可以在其中在 contentExtension 中聊天
  4. 如果您的朋友发送更多消息,那么您的内容扩展的
    didReceiveNotification
    将继续被呼叫。它得到 打电话以便您可以更新对话。

当您的视图控制器处于运行状态时,此方法可能会被多次调用 可见的。具体来说,当有新通知时再次调用它 到达其

threadIdentifier
值与线程标识符匹配的 通知已经显示。该方法被调用于 通知内容应用扩展的主线程。

参考

didReceive(_:)
文档

有关此内容的更多信息,请参阅此答案

总结

thread-id
有两种不同的用例:

  • 分组通知
  • 获取对单个 contentExtension 的连续回调
    thread-id

什么是
apns-collapse-id

如果您已发送通知并且需要更正/更新,则使用。例如,您是《华盛顿邮报》,某人刚刚赢得了总统职位。

您首先发送一条标题为“Albert Bori 赢得 2020 年选举!!”的通知正文为:此消息将很快更新...

然后 3 分钟后,您获得更多信息,他赢得了选举,在 40 个州获胜,在 10 个州落败。因此您更新了正文。然后您可以获得有关确切票数的更多信息。所以你再次更新身体。我相信可以不断更新消息而不会提醒(没有声音,也没有新的横幅。它只会在通知中心更新)更新的用户。

仅当用户已经取消/查看通知时,具有相同

apns-collapse-id
的通知才会提醒/通知用户。这不是为了分组而是为了合并!


6
投票

不幸的是,你不能免费得到这个。您需要创建一个 Notifictation UI 扩展,并实现您自己的 UI(在本例中它是一个对话 UI),并在使用相同线程 id 接收新通知时更新 UI。

编辑:这可能不是正确的答案,请参阅此处更全面的答案。


3
投票

请注意,

thread-id
类型必须是字符串,并且在您的有效负载中它是整数。它开箱即用。


-1
投票

我在 Firebase 不使用 apns-collapse-id 时遇到了这个问题。我的解决方法是使用密钥而不是证书。您可以在developer.apple.com 的证书下方找到密钥。现在,它使用一“行”通知,并将组中的最后一个通知放入该行。替换内容等高级功能需要使用通知 ui 扩展。


© www.soinside.com 2019 - 2024. All rights reserved.