我正在尝试实现 CloudKit 订阅。以前我只是使用CKServerChangeToken
我的应用程序启动时和应用程序中的关键点从自定义区域获取。
我的设置纯粹使用私有数据库。
我只是想知道如果我转向使用订阅,是否还需要进行这种类型的获取?从我看到的文档中并不清楚。
而不是使用订阅查询,我正在使用CKSubscriptionOptionsFiresOnRecordUpdate
并循环我所有的记录类型来注册通知。
我正在尝试实现 CloudKit 订阅。以前我只是使用CKServerChangeToken
我的应用程序启动时和应用程序中的关键点从自定义区域获取。
我的设置纯粹使用私有数据库。
我只是想知道如果我转向使用订阅,是否还需要进行这种类型的获取?从我看到的文档中并不清楚。
而不是使用订阅查询,我正在使用CKSubscriptionOptionsFiresOnRecordUpdate
并循环我所有的记录类型来注册通知。
是的,CKServerChangeToken
即使您实现了CKQuerySubscription
. 这是一个典型的(据我所见)CloudKit 应用程序如何工作以保持其数据同步:
CKServerChangeToken
并获取任何新数据。CKQuerySubscription
,以便您的数据新鲜。苹果将通知描述为“尽力而为”,这意味着有时它们不会到达(相信我,有时它们不会)。因此,我发现定期获取新更改(例如每隔几分钟)很有用,以防我的应用程序错过了更改通知。
以下是一些关于如何注册Task
记录类型的所有更改的示例代码:
let subscription = CKQuerySubscription(recordType: "Task", predicate: NSPredicate(value: true), subscriptionID: "subscriptionTask", options: [.firesOnRecordCreation, .firesOnRecordUpdate, .firesOnRecordDeletion])
let info = CKNotificationInfo()
info.shouldSendContentAvailable = true
info.alertBody = "" //This needs to be set to improve notification priority
subscription.notificationInfo = info
let operation = CKModifySubscriptionsOperation(subscriptionsToSave: [subscription], subscriptionIDsToDelete: nil)
operation.modifySubscriptionsCompletionBlock = { subscriptions, subscriptionIDs, error in
//...
}
let container = CKContainer(identifier: "...")
container.privateCloudDatabase.add(operation)
我希望这会有所帮助。