CloudKit 谓词
CloudKit Predicate
我正在开发一个消息传递应用程序,并且我正在使用 CloudKit 作为推送通知服务。推送通知可能与谓词 'TRUEPREDICATE' 一起工作,但问题是如果 A 向 B 发送消息,C 收到推送通知 too.My 现在的问题是我如何过滤谓词,只有收到消息收到推送通知。
let database = CKContainer.default().publicCloudDatabase
let predicate = NSPredicate(format: "TRUEPREDICATE")
let subscription = CKQuerySubscription(recordType: "Message", predicate: predicate, options: .firesOnRecordCreation)
let notification = CKNotificationInfo()
notification.alertBody = "You have a new message!"
notification.soundName = "default"
subscription.notificationInfo = notification
database.save(subscription) { result, error in
if let error = error {
print(error.localizedDescription)
}
}
在您的示例中,将为每个设置查询订阅的设备触发推送通知。如果要更正此问题,则需要修改谓词以将通知限制为当前 user/device.
例如,如果您要跟踪特定用户的唯一 ID:
let userID = UUID().uuidString
let predicate = NSPredicate(format: "%K == %@", argumentArray: ["recipient", userID])
在此示例中,"recipient" 是 CloudKit 字段名称。
我正在开发一个消息传递应用程序,并且我正在使用 CloudKit 作为推送通知服务。推送通知可能与谓词 'TRUEPREDICATE' 一起工作,但问题是如果 A 向 B 发送消息,C 收到推送通知 too.My 现在的问题是我如何过滤谓词,只有收到消息收到推送通知。
let database = CKContainer.default().publicCloudDatabase
let predicate = NSPredicate(format: "TRUEPREDICATE")
let subscription = CKQuerySubscription(recordType: "Message", predicate: predicate, options: .firesOnRecordCreation)
let notification = CKNotificationInfo()
notification.alertBody = "You have a new message!"
notification.soundName = "default"
subscription.notificationInfo = notification
database.save(subscription) { result, error in
if let error = error {
print(error.localizedDescription)
}
}
在您的示例中,将为每个设置查询订阅的设备触发推送通知。如果要更正此问题,则需要修改谓词以将通知限制为当前 user/device.
例如,如果您要跟踪特定用户的唯一 ID:
let userID = UUID().uuidString
let predicate = NSPredicate(format: "%K == %@", argumentArray: ["recipient", userID])
在此示例中,"recipient" 是 CloudKit 字段名称。