菜鸟教程小白 发表于 2022-12-12 23:47:08

ios - CKServerChangeToken 的 "scope"是什么?


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

<ul>
<li>仅提取到我们从中提取的区域?</li>
<li>或者它是否适用于对该区域所在数据库的任何提取?或者数据库所在的整个容器?<​​/li>
<li>应用扩展呢? (应用程序扩展与主应用程序具有相同的 iCloud 用户,但 fetchUserRecordIDWithCompletionHandler: 返回的“用户”不同:至少在我的测试中)从主应用程序的 fetch 调用中提供更改 token 是否合适,比如说,消息应用程序扩展?我认为不会,但希望有一个书面的官方答案。</li>
</ul></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我也发现 <code>CKServerChangeToken</code> 的范围有点不清楚。但是,在查看文档后,<code>CKFetchDatabaseChangesOperation</code> 和 <code>CKFetchRecordZoneChangesOperation</code> <strong>都提供和管理自己的服务器更改 token 。</strong> </p>

<p>如果您决定遵循 Dave Browning 在他的 <a href="https://developer.apple.com/videos/play/wwdc2017/226/" rel="noreferrer noopener nofollow">2017 WWDC talk</a> 中概述的 CloudKit 工作流程,这将特别有用。获取更改时(大约 8 分钟)。</p>

<p>推荐的方法是:</p>

<p>1) 使用 <code>CKFetchDatabaseChangesOperation</code> 获取数据库的更改。通过 <code>changeTokenUpdatedBlock</code> 接收到更新的 token 后,将其保存在本地。此 token “作用域”为添加操作的私有(private)或共享 <code>CKDatabase</code>。公共(public)数据库不提供更改 token 。 </p>

<p>2) 如果您在之前的操作中通过<code>recordZoneWithIDChangedBlock</code> 接收到区域ID,这表明您可以使用<code>CKFetchRecordZoneChangesOperation</code> 获取具有更改的区域。此操作通过其相当繁琐的初始化参数:<code>CKFetchRecordZoneChangesOperation.ZoneConfiguration</code> 获取它自己唯一的服务器更改 token 。这是针对特定 <code>CKRecordZone</code> 的“范围”。因此,同样,当通过 <code>recordZoneChangeTokensUpdatedBlock</code> 接收更新的 token 时,它需要在本地持久化(可能使用与其 <code>CKRecordZone.ID</code> 相关的 key )。</p>

<p>这里的好处是它可能最大限度地减少网络调用的数量。如果数据库未报告任何更改的区域 ID,则获取数据库更改首先会阻止对每个记录区域进行调用。 </p>

<p>这是 <a href="https://developer.apple.com/library/archive/documentation/DataManagement/Conceptual/CloudKitQuickStart/MaintainingaLocalCacheofCloudKitRecords/MaintainingaLocalCacheofCloudKitRecords.html#//apple_ref/doc/uid/TP40014987-CH12-SW7" rel="noreferrer noopener nofollow">code sample</a>来自贯穿此工作流程的 CloudKit 团队。诚然,一些 API 已经发生了变化,并且注释没有明确说明服务器更改 token 的“范围”。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - CKServerChangeToken 的&#34;scope&#34;是什么?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/41901601/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/41901601/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - CKServerChangeToken 的 &#34;scope&#34;是什么?