如何解决如何检索CloudKit通知的desiredKeys?
我已经设置CloudKit来存储和发送有关更改的通知,该表称为“ Notifications”,非常有效。但是,我正在根据我简单地命名为“ key”(成像订阅不同线程)的字段的内容来处理订阅,
现在,我想根据属性“ desiredKeys”在有效载荷中的“键”字段中包含内容,但未将其包含在UNNotificationCenter willPresent方法的常规有效载荷中(只是常规警报,徽章和声音键)出现,而不是“关键”字段。
我已经按照以下步骤设置了CKNotification.Info:
let querySubscription = CKQuerySubscription(recordType: "Notification",predicate: NSPredicate(format: "key == %@",key),options: .firesOnRecordCreation)
let info = CKSubscription.NotificationInfo()
info.titleLocalizationKey = "%1$@"
info.titleLocalizationArgs = ["title"]
info.subtitleLocalizationKey = "%1$@"
info.subtitleLocalizationArgs = ["subtitle"]
info.alertLocalizationKey = "%1$@"
info.alertLocalizationArgs = ["body"]
info.desiredKeys = ["key"]
info.shouldBadge = true
info.shouldSendContentAvailable = true
info.soundName = "default"
querySubscription.notificationInfo = info
标题,字幕和正文正常工作,但没有所需的键。
但是我有点困惑,因为我已经知道应该从AppDelegate的didReceiveRemoteNotification委托方法中接收的字典中创建一个CKQueryNotification,但从未调用过该方法,仅在UNNotificationCenter中调用了该方法。 / p>
我想念什么?感谢您的帮助!
解决方法
证明数据已包含在UNNotificationCenter willPresent方法中,但未包含在有效负载的“ aps”字典中。除此之外,还有一个“ ck”字典,其中包含一堆东西:
struct ContentView: View {
var body: some View {
Text("Hello World").font(.custom("DaddyRewind",size: 36))
}
}
因此,您必须在ck / qry内部进行深入挖掘以找到所需的密钥。
是的,上面的代码不好看,但是我仍然找到了我想要的东西。
,let userInfo = notification.request.content.userInfo as! [String: Any]
var notificationKey = ""
if let ck = userInfo["ck"] as? [String: Any] {
if let qry = ck["qry"] as? [String: Any] {
if let af = qry["rid"] as? String {
notificationKey = af
}
}
}
print("notification key = \(notificationKey)")
我的工作原理与您描述的相同,只是“ ck”路径略有不同,因此我需要先打印 userInfo 以获得正确的路径
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。