2
私はCloudKit CKDatabaseSubscriptionを設定しようとすると、それを保存しようとしています、私は次のエラーを取得する:保存CKDatabaseSubscriptionは「CloudKitアクセスがユーザ設定により拒否された」なる
「(1002分の9) 『を認証されていません』 ; "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にサインインされます。シミュレータとデバイスの両方で発生します。
CloudKitサブスクリプションに必要なASPN証明書はありますか?それとも私が作っている間違いがありますか?
3秒後に再試行しましたか?短い遅延の後に再試行する必要のある可能性のある多くのエラーがあります。 – rmaddy
はい。私は、呼び出しが失敗した場合にasyncAfterを追加し、保存を再試行します。ダッシュボードにサブスクリプションが表示されず、データベースのサブスクリプションのフェッチによってサブが返され、通知が受信されません(2つのデバイスで実行されます)。 最初の呼び出しと同じように見えますが、必ず失敗してはいけません。 – vagrant
これはCKDatabaseSubscriptionに固有のようです。 CKQuerySubscriptionは期待どおりに動作します。 – vagrant