如何找出CloudKit订阅何时被删除?

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

我在iOS应用程序中使用CloudKit。

在我的应用程序中,每当用户修改某些数据时,我都会更新CloudKit私有数据库,以便用户的其他设备也可以更新。

用户可以启用/禁用此同步机制。

当用户启用同步时,我创建订阅并将本地数据推送到CloudKit。

如果用户已登录到其他设备,则他们会按预期开始获取有关对专用数据库所做更改的远程通知。

该应用程序显示UISwitch供用户启用/禁用同步。

让我们假设用户有2个设备DeviceADeviceB,它们显示已通过将UISwitch.isOn设置为true来启用同步。

如果用户禁用DeviceA上的同步,则会删除订阅,并且对DeviceA所做的更改不会按预期触发对DeviceB的远程通知。

DeviceB仍然表明同步已启用。

有没有办法知道订阅何时被删除?

我知道CKFetchSubscriptionsOperation。我可以定期打电话给CKFetchSubscriptionsOperation以了解订阅。有更好的方法吗?

ios apple-push-notifications cloudkit
1个回答
0
投票

这是一个很好的问题,也是我遇到的问题。你是对的。了解订阅状态的唯一方法是查询CKFetchSubscriptionsOperation可用的内容。

一种可能的解决方法是创建一个名为recordTypeSubscription并保存用户当前使用的subscriptionIDs作为常规CloudKit记录(只需在String上使用CKRecord属性)。

然后,当他们取消订阅设备时,您可以更新Subscription记录,并且所有设备都会收到有关更改的通知。然后,应用程序将根据用户可用的subscriptionIDs更新实际订阅。

所以这是一个潜在的工作流程:

  1. DeviceA取消了subscription1的订阅。
  2. qazxsw poi从qazxsw poi表中删除了qazxsw poi。
  3. DeviceA使用subscriptionRecord1删除了实际的Subscription订阅。
  4. DeviceA得到通知,subscription1被删除并将同步CKModifySubscriptionsOperation()翻转为关闭(我假设您使用本地持久性方法(如数据库或DeviceB)保存这些开关的状态)。

希望这会有所帮助。如果您有任何疑问,请告诉我。

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