4

TL;DR:需要在 APNs 通知负载 JSON 中设置什么键来对应对象的threadIdentifier属性UNNotificationContent?例如,"category"键对应于categoryIdentifier属性。


iOS 10 引入了Notification Content Extension允许我们在通知展开时呈现视图控制器。

我们提供的视图控制器符合UNNotificationContentExtension协议,这需要我们实现该didReceive(_:)方法。

此方法的文档包括以下段落:

当您的视图控制器可见时,可能会多次调用此方法。具体来说,当一个新的通知到达时,它的线程标识符值与已经显示的通知的线程标识符匹配时再次调用

threadIdentifier属性可能在本地通知的代码中设置,但我不知道如何为从服务器发送到 APNs 的远程通知设置它。

UNNotificationContent文档在此处描述了该属性:http: //developer.apple.com/reference/usernotifications/unnotificationcontent

以下 JSON 包括我尝试过的键("thread""thread-identifier"):

{
    "aps" : {
        "alert" : "Hello World!",
        "sound" : "default",
        "category" : "example-category",
        "thread" : "example-thread",
        "thread-identifier" : "example-thread-identifier"
    }
    "custom-field" : "some value",
}

我找不到任何来自 Apple 的关于如何设置的文档。任何人都可以帮忙吗?

4

1 回答 1

12

我从 Apple 的一位联系人那里发现,填充此属性的正确键是"thread-id"键。

所以发送给 APNs 的 JSON 如下:

{
    "aps" : {
        "alert" : "Hello World!",
        "sound" : "default",
        "category" : "example-category",
        "thread-id" : "my conversation blah blah"
    }
    "custom-field" : "some value",
}

这将填充您的通知内容扩展中可通过 访问threadIdentifier的对象的属性。UNNotificationContentnotification.request.content.threadIdentifier

通过设置这个"thread-id"值,意味着didReceive(_:)你的内容扩展的方法将是多次的。首先是在最初扩展通知时,然后是在新通知到达时具有相同的"thread-id"值。

我假设(希望)这将在 iOS 10 正式发布后添加到官方文档中。

于 2016-08-31T09:16:48.493 回答