我正在尝试实施CloudKit订阅。以前我只是在我的应用程序启动时和我的应用程序中的关键点使用CKServerChangeToken
从自定义区域获取。
我的设置纯粹使用私人数据库。
我只是想知道如果我转向使用订阅,是否仍需要进行此类提取?从我看过的文档中我不清楚。
我没有使用订阅查询,而是使用CKSubscriptionOptionsFiresOnRecordUpdate
并循环遍历所有记录类型以注册通知。
是的,即使你实施CKServerChangeToken
,你仍然需要使用CKQuerySubscription
。这是一个典型的(从我看到的)CloudKit应用程序如何工作以保持其数据同步:
CKServerChangeToken
并获取任何新数据。CKQuerySubscription
s中获取来自后台(即无声)推送通知的记录,以便您的数据保持新鲜状态。Apple将通知描述为“尽力而为”,这意味着有时它们不会到达(并且相信我,有时他们不会)。因此,我发现定期获取新更改(例如每隔几分钟)以防我的应用程序错过更改通知很有用。
以下是如何注册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)
我希望有所帮助。