【发布时间】:2016-04-22 03:07:47
【问题描述】:
我正在尝试使用 CloudKit 和 CKSubcription 在几台 Apple TV 之间同步数据。问题是当我添加、删除或更新记录时,永远不会调用 application:didReceiveRemoteNotification:。我相信我正确配置了订阅,并且我已经确认它们已添加到 CloudKit 仪表板。我曾多次尝试在仪表板中重置开发环境,但这无济于事。我真的不想创建一个计时器来经常获取。感谢您的帮助!
另外,如果重要的话,我使用的是 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)
}
}
}
【问题讨论】: