我是否需要增量获取CloudKit更改以及订阅?

问题描述 投票:0回答:1

我正在尝试实施CloudKit订阅。以前我只是在我的应用程序启动时和我的应用程序中的关键点使用CKServerChangeToken从自定义区域获取。

我的设置纯粹使用私人数据库。

我只是想知道如果我转向使用订阅,是否仍需要进行此类提取?从我看过的文档中我不清楚。

我没有使用订阅查询,而是使用CKSubscriptionOptionsFiresOnRecordUpdate并循环遍历所有记录类型以注册通知。

ios cocoa-touch cloudkit cksubscription
1个回答
1
投票

是的,即使你实施CKServerChangeToken,你仍然需要使用CKQuerySubscription。这是一个典型的(从我看到的)CloudKit应用程序如何工作以保持其数据同步:

  1. 启动时获取 - 当应用程序启动或再次激活时,请检查您的CKServerChangeToken并获取任何新数据。
  2. 从通知中获取 - 从记录CKQuerySubscriptions中获取来自后台(即无声)推送通知的记录,以便您的数据保持新鲜状态。

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)

我希望有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.