保存 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 访问被用户设置拒绝”的主要内容,如果未能解决你的问题,请参考以下文章

在 sharedDB cloudkit 中订阅记录更改

matlab怎么保存 matlab如何保存

zbrush怎么保存 zbrush如何保存

Unity怎么保存文件?保存文件然后继续做?

Cloud保存时提示消息是否保存,点是保存,点否不保存。

Android登录后的用户数据如何保存,Android如何保存数据