【问题标题】:Saving CKDatabaseSubscription gets “CloudKit access was denied by user settings”保存 CKDatabaseSubscription 得到“CloudKit 访问被用户设置拒绝”
【发布时间】: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 按预期工作。

标签: ios swift cocoa-touch cloudkit


【解决方案1】:

我遇到了同样的错误,在 iCloud 帐户上启用“iCloud Drive”后它就消失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 2012-05-12
    相关资源
    最近更新 更多