收到CKDatabaseNotification后查询更改

问题描述 投票:0回答:1

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

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

但是我收到的通知(CKDatabaseNotification)没有任何可以让我找到更改记录的内容。我已经尝试按照这个link的建议将它作为CKNotification投射,但正如预期的那样失败。

我有自定义区域设置,我的问题如下:

  • 如何获取有关CKDatabaseNotification更改内容的任何信息?
  • 我甚至以正确的方式做到了吗?我也读过其他地方,有些人设法通过CKQuerySubscription在共享数据库上设置订阅,只要它在自定义区域,我有,但我的代码告诉我订阅失败。
ios swift xcode cloudkit
1个回答
1
投票

CKDatabaseNotification只会告诉您某些内容已更改,而不是它的内容。建议的前进路径是使用CKFetchDatabaseChangesOperation来查找记录区域有哪些更改。然后在CKFetchRecordZoneChangesOperation中使用该操作的记录区域ID来获取所有更改。

CloudKit Quick Start Guide中有更多的信息

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

在应用程序启动或接收推送后,您的应用程序使用CKFetchDatabaseChangesOperation,然后使用CKFetchRecordZoneChangesOperation向服务器询问自上次更新以来的更改。

这些操作的关键是previousServerChangeToken对象,它告诉服务器您的应用上次与服务器通话的时间,允许服务器仅返回自那时以来更改的项目。

首先,您的应用将使用CKFetchDatabaseChangesOperation来找出哪些区域已更改

然后

接下来,您的应用使用CKFetchRecordZoneChangesOperation对象和您刚刚收集的区域ID集来执行以下操作:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.