【发布时间】:2015-12-03 20:07:35
【问题描述】:
我正在编写一个应用程序并使用 CloudKit。该应用程序将其数据存储在公共数据库中。我创建了一个本地缓存,这样即使网络不可用,我的应用程序也能正常运行。我正在使用CKSubscriptions 和由此产生的推送通知来保持来自云的更改同步。所有这一切都运作良好。
现在,如果用户有多个设备并在所有这些设备上运行我的应用程序,那么我不能再将通知标记为“已读”(使用 CKMarkNotificationsReadOperation),因为我不知道所有设备何时处理完毕他们。如果发生更改时其中一个设备处于脱机状态,则尤其如此。如果我确实将它们标记为已读,那么当其他设备检查新通知(使用CKFetchNotificationChangesOperation)时,它们将看不到它们,并且它们的本地缓存将过期。
我当前的解决方案是将所有通知保持在“未读”状态并依赖CKFetchNotificationChangesOperation 中的CKServerChangeToken,以便每个设备仅获取自该设备上次检查以来发生的通知。这很好用。
但是,在我看来,由于我没有将任何通知标记为“已读”,它们只会继续堆积在服务器上。也许这没什么大不了的,但它们会占用空间,我没有好办法摆脱它们。随着时间的推移,这似乎会成为一个问题。
有没有人以类似的方式使用订阅/通知并提出不同的方法?此外,欢迎对我的方法提出任何反馈。
【问题讨论】:
-
通知适用于每个设备。每个设备都应将收到的通知标记为已读。这不应影响其他设备的通知。
-
@rmaddy 我也有同样的想法,但这不是我所经历的。我刚刚用 3 台设备进行了测试。第一台设备在 WiFi 上,另外两台在飞行模式下——都登录到同一个 iCloud 帐户。我使用 iCloud Dashboard 做了 3 处更改。第一个设备正确收到通知并更新其数据。它将通知标记为已读。我在第二台设备上关闭了飞行模式。它收到通知说之前的通知已被阅读:
notificationTypeofReadNotification,但没有收到更改通知。第三台设备是一样的。似乎不正确。还有其他想法吗?
标签: ios push-notification cloudkit