【问题标题】:CloudKit: Using notifications to keep changes in sync across multiple devicesCloudKit:使用通知使更改在多个设备之间保持同步
【发布时间】:2015-12-03 20:07:35
【问题描述】:

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

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

我当前的解决方案是将所有通知保持在“未读”状态并依赖CKFetchNotificationChangesOperation 中的CKServerChangeToken,以便每个设备仅获取自该设备上次检查以来发生的通知。这很好用。

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

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

【问题讨论】:

  • 通知适用于每个设备。每个设备都应将收到的通知标记为已读。这不应影响其他设备的通知。
  • @rmaddy 我也有同样的想法,但这不是我所经历的。我刚刚用 3 台设备进行了测试。第一台设备在 WiFi 上,另外两台在飞行模式下——都登录到同一个 iCloud 帐户。我使用 iCloud Dashboard 做了 3 处更改。第一个设备正确收到通知并更新其数据。它将通知标记为已读。我在第二台设备上关闭了飞行模式。它收到通知说之前的通知已被阅读:notificationType of ReadNotification,但没有收到更改通知。第三台设备是一样的。似乎不正确。还有其他想法吗?

标签: ios push-notification cloudkit


【解决方案1】:

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

【讨论】:

  • 谢谢,@乔尔。当我看到CKErrorChangeTokenExpired 中的CKError 时,我假设同样的事情,这让我相信通知必须在一段时间后被删除。感谢您的确认。
  • 但是文档说如果令牌过期,则传递 nil 以获取所有先前的通知,这意味着令牌已从服务器中删除,而不是通知。
  • 公共数据库的工作方式不同。此外,您不能依赖通知来同步您的数据,通知只是为了让您知道发生了什么事。
猜你喜欢
  • 2016-04-05
  • 2017-04-13
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
相关资源
最近更新 更多