CloudKit:使用通知使更改在多个设备之间保持同步

CloudKit: Using notifications to keep changes in sync across multiple devices

我正在编写一个应用程序并使用 CloudKit。该应用程序将其数据存储在 public 数据库中。我已经创建了一个本地缓存,这样即使网络不可用,我的应用程序也可以运行。我正在使用 CKSubscriptions 和由此产生的推送通知来保持来自云端的更改同步。所有这些都运作良好。

现在,如果用户有多个设备并且在所有这些设备上都是 运行 我的应用程序,那么我不能再将通知标记为“已读”(使用 CKMarkNotificationsReadOperation),因为我不会不知道什么时候所有的设备都处理完了。如果其中一个设备在发生更改时处于离线状态,则尤其如此。如果我将它们标记为已读,那么当其他设备检查新通知(使用 CKFetchNotificationChangesOperation)时,它们将看不到它们,并且它们的本地缓存将过时。

我目前的解决方案是让所有通知都处于“未读”状态,并依赖 CKFetchNotificationChangesOperation 中的 CKServerChangeToken,以便每个设备只获取自该设备上次以来发生的通知检查。这很好用。

但是,在我看来,由于我没有将任何通知标记为“已读”,它们只会继续堆积在服务器上。也许这没什么大不了的,但它们会占用 space,我没有什么好办法摆脱它们。随着时间的推移,这似乎是个问题。

有没有人以类似的方式使用 subscriptions/notifications 并提出不同的方法?此外,欢迎对我的方法提出任何反馈。

无论读取状态如何,服务器都会删除旧通知。