Я пытаюсь создать CloudKit CKDatabaseSubscription и пытается спасти его, я получаю следующее сообщение об ошибке:Saving CKDatabaseSubscription получает «доступ CloudKit было отказано пользовательских настроек»
«Не Аутентифицированный" (9/1002) ; «Доступ к CloudKit был запрещен настройками пользователя»; Retry after 3.0 seconds '
Я могу создавать записи в частной базе данных через приложение без проблем, но подписка не будет сохранена.
<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)
}
Таким образом, в приведенном выше коде вышеуказанная ошибка выводится из печати в блоке. Все в области видимости, компилируется отлично, пользователь подключен к iCloud и т. Д. Возникает как на симуляторе, так и на устройстве.
Это сертификат ASPN, необходимый для подписки на CloudKit? Или есть какая-то ошибка, которую я делаю?
Повторите попытку через 3 секунды? Существует много возможных ошибок, которые могут потребовать повторной попытки после небольшой задержки. – rmaddy
Да. Я добавил asyncAfter, если вызов завершился неудачно, и он повторит попытку сохранения. Последующие попытки преуспевают, хотя на панели мониторинга не появляются подписки, выбор подписей для базы данных возвращает ожидаемый элемент, и никаких уведомлений не поступает (выполняется на двух устройствах). Похоже, что первоначальный вызов не должен ВСЕГДА терпеть неудачу, и хотя последующий работает. – vagrant
Ну, похоже, это определенно специфично для CKDatabaseSubscription. CKQuerySubscription работает так, как ожидалось. – vagrant