收到CKDatabaseNotification

时间:2019-03-12 11:03:11

标签: ios swift xcode cloudkit

我目前正在构建一个应用程序,该应用程序允许用户共享事件并使用多部电话同时签到他们的客人。我设法设置了CKQuerySubscription并进行了更新,删除和创建,但只能在主电话(共享活动的电话)上正常工作。

我最近发现,对于非主要用户来说,要获取通知,它必须从我设置的CKDatabaseNotification中获取通知,并且当我通过CloudKit仪表板进行更改时,它可以在获取远程通知时起作用。

但是我收到的通知(CKDatabaseNotification)没有任何可让我查找更改记录的内容。我已尝试按照此link的建议将其强制转换为CKNotification,但按预期会失败。

我设置了一个自定义区域,我的问题如下:

  • 如何从CKDatabaseNotification获得有关更改的任何信息?
  • 我什至正确地做到了吗?我在其他地方也读过一些文章,有人设法通过共享数据库上的CKQuerySubscription设置订阅,只要它位于自定义区域即可,但是我的代码告诉我订阅失败。

1 个答案:

答案 0 :(得分:1)

CKDatabaseNotification将仅告诉您某些更改,而不是更改。推荐的前进路径是使用CKFetchDatabaseChangesOperation来查找哪些记录区域发生了更改。然后,您可以在CKFetchRecordZoneChangesOperation中使用该操作中的记录区ID来获取所有更改。

CloudKit Quick Start Guide

中有更多信息

我正在挑选以下一些相关信息:

  

在应用启动或收到推送后,您的应用将使用CKFetchDatabaseChangesOperation,然后使用CKFetchRecordZoneChangesOperation要求服务器仅提供自上次更新以来的更改。

     

这些操作的关键是previousServerChangeToken对象,   它告诉服务器您的应用最后一次与服务器对话的时间,   允许服务器仅返回自   那个时候。

     

首先,您的应用将使用CKFetchDatabaseChangesOperation进行查找   哪些区域已更改

然后

  

接下来,您的应用将CKFetchRecordZoneChangesOperation对象与   您刚刚收集的一组区域ID可以执行以下操作:

     

•创建和更新任何更改的记录   •删除不再存在的任何记录   •更新区域更改令牌

WWDC视频CloudKit Best Practices也解决了这个话题。