我使用CloudKit。我有一个将isLive作为属性的Channel记录类型。它可以是指示通道是否处于活动状态的0或1。
如果频道从0变为1,则实时状态将发送通知给所有用户。
我尝试这样定义CKQuerySubscription:
let liveSubscription = CKQuerySubscription(recordType: "Channel", predicate: NSPredicate(format: "(recordID == '4cebe441-c6f7-47af-85df-e6572e757c5c') AND (isLive == 1)"), options: [.firesOnRecordUpdate])
let liveNotificationInfo = CKNotificationInfo()
liveNotificationInfo.shouldSendContentAvailable = false
liveNotificationInfo.shouldBadge = true
liveNotificationInfo.alertBody = "Test is live now"
channelSubscription.notificationInfo = liveNotificationInfo但是,这确实会在此频道记录的任何更新时发送通知。它不关心isLive谓词。
您知道如何接收isLive从0更改为1的通知吗?
或者是更好地接收此频道记录上的所有更新,在我的应用程序中处理它们,然后在必要时发送本地通知?
发布于 2017-01-16 20:30:04
不能仅在一次属性更新时注册更改。当任何字段的被更新时,你都会收到通知。这要好得多,而且它总是这样工作。
发布于 2018-03-12 04:35:10
两件事。首先,您应该发送对记录的引用,而不是原始的recordName字符串。其次,将.firesOnce添加到订阅中,使其只触发一次。
let reference = CKReference(recordID: recordID, action: .none)
let predicate = NSPredicate(format: "%K == %@ && %K == %@",
"isLive", 1,
"recordID", reference)
let liveSubscription = CKQuerySubscription(recordType: "Channel",
predicate: predicate,
options: [.firesOnRecordUpdate, .firesOnce])https://stackoverflow.com/questions/39689497
复制相似问题