1

我使用 CloudKit。我有一个Channel记录类型,它确实具有isLive属性。它可以是01指示频道是否直播。

如果频道从 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 的通知吗?

还是最好接收此频道记录的所有更新,在我的应用程序中处理它们,然后在必要时发送本地通知?

4

2 回答 2

0

两件事情。首先,您应该发送对记录的引用,而不是原始的 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])
于 2018-03-11T20:35:10.143 回答
0

不可能仅在一次属性更新时注册更改。当任何字段更新时,您将始终收到通知。这要好得多,它总是这样工作。

于 2017-01-16T12:30:03.903 回答