CloudKit 谓词

Posted

技术标签:

【中文标题】CloudKit 谓词【英文标题】:CloudKit Predicate 【发布时间】:2016-10-11 14:48:01 【问题描述】:

我正在制作一个消息传递应用程序,并且我正在使用 CloudKit 作为推送通知服务。推送通知可能与谓词“TRUEPREDICATE”一起工作,但问题是如果 A 向 B 发送消息,C 也会收到推送通知。我现在的问题是如何过滤只有收到消息的人才能获得的谓词推送通知。

 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)
        
    

【问题讨论】:

如果您可以编辑您的问题以包含相关代码,将会很有帮助。 【参考方案1】:

在您的示例中,将为设置查询订阅的每个设备触发推送通知。如果要更正此问题,则需要修改谓词以将通知限制为当前用户/设备。

例如,如果您要跟踪特定用户的唯一 ID:

let userID = UUID().uuidString
let predicate = NSPredicate(format: "%K == %@", argumentArray: ["recipient", userID])

在本例中,“recipient”是 CloudKit 字段名称。

【讨论】:

以上是关于CloudKit 谓词的主要内容,如果未能解决你的问题,请参考以下文章

在 CloudKit 中使用比较谓词进行查询

CloudKit 谓词:使用 CKQuery 的谓词搜索多个参考字段

在 CloudKit 谓词中使用包含比较数组的 CONTAINS 或 ANY

swift Swift - CloudKit - 谓词来获取用户

在 Cloudkit 谓词上使用 OR 运算符

CKReference 的 CloudKit 订阅通知未按预期工作