• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - CKServerChangeToken 的 "scope"是什么?

[复制链接]
菜鸟教程小白 发表于 2022-12-12 23:47:08 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

https://developer.apple.com/reference/cloudkit/ckserverchangetoken 中所述,CloudKit 服务器返回一个更改 token 作为 CKFetchRecordZoneChangesOperation 回调响应的一部分。对于哪组后续记录提取,我应该在我的提取调用中包含给定的更改 token ?

  • 仅提取到我们从中提取的区域?
  • 或者它是否适用于对该区域所在数据库的任何提取?或者数据库所在的整个容器?<​​/li>
  • 应用扩展呢? (应用程序扩展与主应用程序具有相同的 iCloud 用户,但 fetchUserRecordIDWithCompletionHandler: 返回的“用户”不同:至少在我的测试中)从主应用程序的 fetch 调用中提供更改 token 是否合适,比如说,消息应用程序扩展?我认为不会,但希望有一个书面的官方答案。



Best Answer-推荐答案


我也发现 CKServerChangeToken 的范围有点不清楚。但是,在查看文档后,CKFetchDatabaseChangesOperationCKFetchRecordZoneChangesOperation 都提供和管理自己的服务器更改 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap