【发布时间】: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