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