2016-10-10 12 views
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証明書はありますか?それとも私が作っている間違いがありますか?

+0

3秒後に再試行しましたか?短い遅延の後に再試行する必要のある可能性のある多くのエラーがあります。 – rmaddy

+0

はい。私は、呼び出しが失敗した場合にasyncAfterを追加し、保存を再試行します。ダッシュボードにサブスクリプションが表示されず、データベースのサブスクリプションのフェッチによってサブが返され、通知が受信されません(2つのデバイスで実行されます)。 最初の呼び出しと同じように見えますが、必ず失敗してはいけません。 – vagrant

+0

これはCKDatabaseSubscriptionに固有のようです。 CKQuerySubscriptionは期待どおりに動作します。 – vagrant

答えて

4

iCloudアカウントで「iCloudドライブ」を有効にした後も、同じエラーが発生していました。

関連する問題