gpt4 book ai didi

ios - 我是否需要增量获取 CloudKit 更改和订阅?

转载 作者:行者123 更新时间:2023-11-28 23:49:28 34 4
gpt4 key购买 nike

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

我的设置纯粹使用私有(private)数据库。

我只是想知道如果我转向使用订阅是否仍然需要进行这种类型的获取?从我看到的文档来看,还不清楚。

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

最佳答案

是的,即使您实现了CKQuerySubscription,您仍然需要使用CKServerChangeToken。这就是典型的(据我所知)CloudKit 应用保持数据同步的方式:

  1. 启动时获取 - 当应用启动或再次激活时,检查您的 CKServerChangeToken 并获取任何新数据。
  2. 从通知中获取 - 当记录从您的记录 CKQuerySubscription 传入时,从后台(即静默)推送通知更新记录,以便您的数据保持最新。

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)

希望对您有所帮助。

关于ios - 我是否需要增量获取 CloudKit 更改和订阅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52193289/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com