如 https://developer.apple.com/reference/cloudkit/ckserverchangetoken 中所述,CloudKit 服务器返回一个更改 token 作为 CKFetchRecordZoneChangesOperation 回调响应的一部分。对于哪组后续记录提取,我应该在我的提取调用中包含给定的更改 token ?
我也发现 CKServerChangeToken
的范围有点不清楚。但是,在查看文档后,CKFetchDatabaseChangesOperation
和 CKFetchRecordZoneChangesOperation
都提供和管理自己的服务器更改 token 。
如果您决定遵循 Dave Browning 在他的 2017 WWDC talk 中概述的 CloudKit 工作流程,这将特别有用。获取更改时(大约 8 分钟)。
推荐的方法是:
1) 使用 CKFetchDatabaseChangesOperation
获取数据库的更改。通过 changeTokenUpdatedBlock
接收到更新的 token 后,将其保存在本地。此 token “作用域”为添加操作的私有(private)或共享 CKDatabase
。公共(public)数据库不提供更改 token 。
2) 如果您在之前的操作中通过recordZoneWithIDChangedBlock
接收到区域ID,这表明您可以使用CKFetchRecordZoneChangesOperation
获取具有更改的区域。此操作通过其相当繁琐的初始化参数:CKFetchRecordZoneChangesOperation.ZoneConfiguration
获取它自己唯一的服务器更改 token 。这是针对特定 CKRecordZone
的“范围”。因此,同样,当通过 recordZoneChangeTokensUpdatedBlock
接收更新的 token 时,它需要在本地持久化(可能使用与其 CKRecordZone.ID
相关的 key )。
这里的好处是它可能最大限度地减少网络调用的数量。如果数据库未报告任何更改的区域 ID,则获取数据库更改首先会阻止对每个记录区域进行调用。
这是 code sample来自贯穿此工作流程的 CloudKit 团队。诚然,一些 API 已经发生了变化,并且注释没有明确说明服务器更改 token 的“范围”。
关于ios - CKServerChangeToken 的 "scope"是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41901601/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |