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 字段名称。