保存 CKDatabaseSubscription 得到“CloudKit 访问被用户设置拒绝”
Posted
技术标签:
【中文标题】保存 CKDatabaseSubscription 得到“CloudKit 访问被用户设置拒绝”【英文标题】:Saving CKDatabaseSubscription gets “CloudKit access was denied by user settings” 【发布时间】:2016-10-10 18:17:11 【问题描述】:我正在尝试设置 CloudKit CKDatabaseSubscription 并尝试保存它,我收到以下错误:
'"未认证" (9/1002); “CloudKit 访问被用户设置拒绝”; 3.0 秒后重试'
我可以通过应用程序在私有数据库上创建记录没有问题,但订阅不会保存。
<snip>
container = CKContainer(identifier: "<valid identifier>")
publicDB = container.publicCloudDatabase
privateDB = container.privateCloudDatabase
createSubscriptions()
</snip>
func createSubscriptions()
let sub = CKDatabaseSubscription(subscriptionID: "main")
let noteInfo = CKNotificationInfo()
noteInfo.shouldSendContentAvailable = true
sub.notificationInfo = noteInfo
let op = CKModifySubscriptionsOperation(subscriptionsToSave: [sub], subscriptionIDsToDelete: nil)
op.qualityOfService = .utility
op.modifySubscriptionsCompletionBlock = (subscriptions, name, error) in
print ("error-\(error)")
privateDB.add(op)
所以在上面的代码中,上面的错误是从块中的 print 打印出来的。一切都在范围内,编译良好,用户登录到 iCloud,等等。在模拟器和设备上都发生。
订阅 CloudKit 是否需要 ASPN 证书?还是我犯了什么错误?
【问题讨论】:
您是否在 3 秒后重试?有许多可能的错误需要您在短暂延迟后重试。 是的。如果调用失败,我添加了一个 asyncAfter 并重新尝试保存。随后的尝试成功,虽然没有订阅显示在仪表板上,但获取数据库的订阅会返回预期的订阅,并且从未收到任何通知(在两台设备上运行)。似乎最初的调用不应该总是失败,即使随后的调用似乎有效。 嗯,它似乎绝对特定于 CKDatabaseSubscription。 CKQuerySubscription 按预期工作。 【参考方案1】:我遇到了同样的错误,在 iCloud 帐户上启用“iCloud Drive”后它就消失了。
【讨论】:
以上是关于保存 CKDatabaseSubscription 得到“CloudKit 访问被用户设置拒绝”的主要内容,如果未能解决你的问题,请参考以下文章