我目前正在构建一个应用程序,该应用程序允许用户共享事件并使用多部电话同时签到他们的客人。我设法设置了CKQuerySubscription并进行了更新,删除和创建,但只能在主电话(共享活动的电话)上正常工作。
我最近发现,对于非主要用户来说,要获取通知,它必须从我设置的CKDatabaseNotification中获取通知,并且当我通过CloudKit仪表板进行更改时,它可以在获取远程通知时起作用。
但是我收到的通知(CKDatabaseNotification)没有任何可让我查找更改记录的内容。我已尝试按照此link的建议将其强制转换为CKNotification,但按预期会失败。
我设置了一个自定义区域,我的问题如下:
答案 0 :(得分:1)
CKDatabaseNotification将仅告诉您某些更改,而不是更改。推荐的前进路径是使用CKFetchDatabaseChangesOperation来查找哪些记录区域发生了更改。然后,您可以在CKFetchRecordZoneChangesOperation中使用该操作中的记录区ID来获取所有更改。
中有更多信息我正在挑选以下一些相关信息:
在应用启动或收到推送后,您的应用将使用CKFetchDatabaseChangesOperation,然后使用CKFetchRecordZoneChangesOperation要求服务器仅提供自上次更新以来的更改。
这些操作的关键是previousServerChangeToken对象, 它告诉服务器您的应用最后一次与服务器对话的时间, 允许服务器仅返回自 那个时候。
首先,您的应用将使用CKFetchDatabaseChangesOperation进行查找 哪些区域已更改
然后
接下来,您的应用将CKFetchRecordZoneChangesOperation对象与 您刚刚收集的一组区域ID可以执行以下操作:
•创建和更新任何更改的记录 •删除不再存在的任何记录 •更新区域更改令牌
WWDC视频CloudKit Best Practices也解决了这个话题。