如何找出 CloudKit 订阅何时被删除?
How to find out when a CloudKit Subscription is deleted?
我在 iOS 应用程序中使用 CloudKit。
在我的应用程序中,每当用户修改某些数据时,我都会更新 CloudKit 私有数据库,以便用户的其他设备也可以得到更新。
此同步机制可以由用户enabled/disabled。
当用户启用同步时,我创建订阅并将本地数据推送到 CloudKit。
如果用户已登录到其他设备,他们将开始按预期收到有关私有数据库更改的远程通知。
应用程序显示 UISwitch
供用户 enable/disable 同步。
让我们假设用户有 2 台设备 DeviceA
和 DeviceB
,这表明已通过将 UISwitch.isOn
设置为 true 来启用同步。
如果用户在 DeviceA
上禁用同步,则订阅将被删除并且在 DeviceA
上所做的更改不会按预期触发对 DeviceB
的远程通知。
但是DeviceB
仍然显示已启用同步。
有没有办法知道订阅何时被删除?
我知道 CKFetchSubscriptionsOperation
。我可以定期致电 CKFetchSubscriptionsOperation
了解订阅情况。有更好的方法吗?
这是一个很好的问题,也是我运行要解决的问题。你是对的。了解订阅状态的唯一方法是查询 CKFetchSubscriptionsOperation
.
可用的内容
一个可能的解决方法是创建一个名为 Subscription
的 recordType
并将用户当前使用的 subscriptionID
保存为 常规 CloudKit 记录(只需在CKRecord
上使用String
属性)。
然后当他们在设备上取消订阅时,您可以更新 Subscription
记录,他们的所有设备都会收到更改通知。然后,该应用会根据用户可用的 subscriptionID
更新 实际 订阅。
所以这是一个潜在的工作流程:
DeviceA
取消订阅 subscription1
。
DeviceA
从 Subscription
table. 中删除 subscriptionRecord1
DeviceA
使用 CKModifySubscriptionsOperation()
. 删除实际的 subscription1
订阅
DeviceB
收到通知 subscriptionRecord1
已删除并将同步 UISwitch
关闭(我假设您正在使用本地持久性方法(如数据库)保存这些开关的状态或 UserDefaults
).
希望对您有所帮助。如果您有任何问题,请告诉我。
我在 iOS 应用程序中使用 CloudKit。
在我的应用程序中,每当用户修改某些数据时,我都会更新 CloudKit 私有数据库,以便用户的其他设备也可以得到更新。
此同步机制可以由用户enabled/disabled。
当用户启用同步时,我创建订阅并将本地数据推送到 CloudKit。
如果用户已登录到其他设备,他们将开始按预期收到有关私有数据库更改的远程通知。
应用程序显示 UISwitch
供用户 enable/disable 同步。
让我们假设用户有 2 台设备 DeviceA
和 DeviceB
,这表明已通过将 UISwitch.isOn
设置为 true 来启用同步。
如果用户在 DeviceA
上禁用同步,则订阅将被删除并且在 DeviceA
上所做的更改不会按预期触发对 DeviceB
的远程通知。
但是DeviceB
仍然显示已启用同步。
有没有办法知道订阅何时被删除?
我知道 CKFetchSubscriptionsOperation
。我可以定期致电 CKFetchSubscriptionsOperation
了解订阅情况。有更好的方法吗?
这是一个很好的问题,也是我运行要解决的问题。你是对的。了解订阅状态的唯一方法是查询 CKFetchSubscriptionsOperation
.
一个可能的解决方法是创建一个名为 Subscription
的 recordType
并将用户当前使用的 subscriptionID
保存为 常规 CloudKit 记录(只需在CKRecord
上使用String
属性)。
然后当他们在设备上取消订阅时,您可以更新 Subscription
记录,他们的所有设备都会收到更改通知。然后,该应用会根据用户可用的 subscriptionID
更新 实际 订阅。
所以这是一个潜在的工作流程:
DeviceA
取消订阅subscription1
。DeviceA
从Subscription
table. 中删除 DeviceA
使用CKModifySubscriptionsOperation()
. 删除实际的 DeviceB
收到通知subscriptionRecord1
已删除并将同步UISwitch
关闭(我假设您正在使用本地持久性方法(如数据库)保存这些开关的状态或UserDefaults
).
subscriptionRecord1
subscription1
订阅
希望对您有所帮助。如果您有任何问题,请告诉我。