如https://developer.apple.com/reference/cloudkit/ckserverchangetoken中所述,CloudKit 服务器返回更改令牌作为 CKFetchRecordZoneChangesOperation 回调响应的一部分。对于哪组后续记录提取,我应该在提取调用中包含给定的更改标记?
我也发现范围CKServerChangeToken有点不清楚。然而,回顾文档,后两者CKFetchDatabaseChangesOperation并CKFetchRecordZoneChangesOperation 提供和管理自己的服务器更改令牌。
如果您决定在获取更改(大约 8 分钟标记)时遵循 Dave Browning 在他2017 年 WWDC 演讲中概述的 CloudKit 工作流程,这将特别有用。
推荐的方法是:
1) 使用CKFetchDatabaseChangesOperation. 通过 接收到更新的令牌后changeTokenUpdatedBlock,将其保留在本地。此令牌的“范围”限定CKDatabase为操作添加到的私有或共享。公共数据库不提供更改令牌。
2) 如果您recordZoneWithIDChangedBlock在之前的操作中通过 接收到区域 ID ,这表明您可以使用 获取更改的区域CKFetchRecordZoneChangesOperation。此操作通过相当繁琐的初始化参数接收它自己唯一的服务器更改令牌:CKFetchRecordZoneChangesOperation.ZoneConfiguration。这是针对此特定CKRecordZone. 因此,同样,当通过 接收更新的令牌时recordZoneChangeTokensUpdatedBlock,它需要在本地持久化(可能使用与其相关的密钥CKRecordZone.ID)。
这里的好处是它可能最大限度地减少了网络调用的数量。如果数据库未报告任何已更改的区域 ID,则首先获取数据库更改可防止对每个记录区域进行调用。
这是CloudKit 团队的一个代码示例,它贯穿了这个工作流程。不可否认,一些 API 已经更改,并且注释没有明确说明服务器更改令牌的“范围”。
| 归档时间: |
|
| 查看次数: |
317 次 |
| 最近记录: |