如何确定何时删除CloudKit订阅?

时间:2019-04-18 07:32:53

标签: ios apple-push-notifications cloudkit

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

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

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

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

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

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

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

如果用户在DeviceA上禁用同步,则订阅将被删除,并且在DeviceA上进行的更改不会触发到DeviceB的远程通知。

但是DeviceB仍然显示已启用同步。

是否有办法知道何时删除订阅?

我了解CKFetchSubscriptionsOperation。我可以定期致电CKFetchSubscriptionsOperation来了解订阅。有更好的方法吗?。

1 个答案:

答案 0 :(得分:0)

这是一个重大问题,也是我遇到的一个问题。你是对的。知道订阅状态的唯一方法是查询CKFetchSubscriptionsOperation可用的内容。

一种可能的解决方法是创建一个名为recordType之类的Subscription并将用户当前使用的subscriptionID保存为常规CloudKit记录(在String上使用CKRecord属性。

然后,当他们取消订阅设备时,您可以更新Subscription记录,所有他们的设备都会收到有关更改的通知。然后,该应用将根据用户可用的subscriptionID s更新 actual 订阅。

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

  1. DeviceAsubscription1退订。
  2. DeviceAsubscriptionRecord1表中删除Subscription
  3. DeviceA使用subscription1删除实际的CKModifySubscriptionsOperation()订阅。
  4. DeviceB收到subscriptionRecord1被删除的通知,并将同步UISwitch切换为关闭(我假设您正在使用本地持久性方法(如数据库或{ {1}}。

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