#ios #swift #cocoa-touch #cloudkit
#iOS #swift #cocoa-touch #cloudkit
Вопрос:
Я пытаюсь настроить 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)
}
Итак, в приведенном выше коде вышеуказанная ошибка выводится из печати в блоке. Все находится в области видимости, компилируется нормально, пользователь вошел в iCloud и т. Д. Происходит как на симуляторе, так и на устройстве.
Требуется ли сертификат ASPN для подписки на CloudKit? Или я допускаю какую-то ошибку?
Комментарии:
1. Вы повторили попытку через 3 секунды? Существует множество возможных ошибок, которые могут потребовать повторной попытки после небольшой задержки.
2. ДА. Я добавил asyncAfter в случае сбоя вызова и повторной попытки сохранения. Последующие попытки завершаются успешно, хотя подписки не отображаются на панели мониторинга, выборка подписок для базы данных возвращает ожидаемый вложенный файл, и уведомления никогда не поступают (выполняется на двух устройствах). Похоже, что первоначальный вызов не ВСЕГДА должен завершаться неудачей, и даже если последующий вызов работает.
3. Ну, похоже, это определенно относится к CKDatabaseSubscription. CKQuerySubscription работает так, как ожидалось.
Ответ №1:
Я получал ту же ошибку, и она исчезла после того, как я включил «iCloud Drive» в учетной записи iCloud.