CloudKitとCKSubcriptionを使用して、いくつかのApple TV間でデータを同期しようとしています。問題はapplication:didReceiveRemoteNotification:
で、レコードの追加、削除、または更新時には呼び出されません。私はサブスクリプションを正しく設定していると信じて、CloudKitダッシュボードに追加されたことを確認しました。私はダッシュボードで開発環境をリセットしようと繰り返し試みましたが、それは助けにはなりません。私は本当に毎回頻繁にフェッチするタイマーを作成したくありません。助けてくれてありがとう!CloudKitサブスクリプションin tvOS
また、私はCloudKitでプライベートデータベースを使用していますが、重要であればパブリックデータベースではありません。
AppDelegate.swift
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
CloudKitManager.subscribeToItemUpdates()
application.registerForRemoteNotifications()
...
return true
}
CloudKitManager.swift
class func subscribeToItemUpdates() {
if let uuid = UIDevice.currentDevice().identifierForVendor?.UUIDString {
saveSubscriptionWithIdentifier(uuid + "create", options: CKSubscriptionOptions.FiresOnRecordCreation)
saveSubscriptionWithIdentifier(uuid + "update", options: CKSubscriptionOptions.FiresOnRecordUpdate)
saveSubscriptionWithIdentifier(uuid + "delete", options: CKSubscriptionOptions.FiresOnRecordDeletion)
}
}
class func saveSubscriptionWithIdentifier(identifier: String, options: CKSubscriptionOptions) {
let sub = CKSubscription(recordType: "Message", predicate: NSPredicate(value: true), subscriptionID: identifier, options: options)
sub.notificationInfo = CKNotificationInfo()
let publicDatabase = CKContainer.defaultContainer().publicCloudDatabase
publicDatabase.saveSubscription(sub) { (savedSubscription, error) -> Void in
if error != nil {
print("Error saving CloudKit subscription \(error)")
}
else {
print("Saved subscription to CloudKit", savedSubscription)
}
}
}
を参照してください。私はEVCloudKitDaoを見て、アプリが起動するたびにすべての購読を削除して再購読しているようだ。私はそれをしていない、それはおそらく問題ですか?それは必要ですか? CloudKitの公開データベースではなくプライベートデータベースを使用しているので、それは違いがありますか?ありがとう –