Как лучше всего подписаться на общедоступную базу данных в CloudKit? У меня есть таблица с людьми. У каждого человека есть имя и местонахождение. После изменения местоположения оно обновляется в CloudKit. Эта часть работает нормально.
Но я не могу заставить его работать, чтобы получать уведомления, когда есть обновление записи.
Какой-то пример был бы очень полезен, так как я уже рассмотрел возможный вариант. Я рассмотрел варианты сохранения подписки в базе данных, а также параметр CKModifySubscriptionsOperation.
В настоящее время мой код для подписки выглядит так:
let predicate = NSPredicate(format: "TRUEPREDICATE")
let newSubscription = CKQuerySubscription(recordType: "Person", predicate: predicate, options: [.firesOnRecordCreation, .firesOnRecordDeletion, .firesOnRecordUpdate])
let info = CKSubscription.NotificationInfo()
info.shouldSendContentAvailable = true
newSubscription.notificationInfo = info
database.save(newSubscription, completionHandler: {
(subscription, error) in
if error != nil {
print("Error Creating Subscription")
print(error)
} else {
userSettings.set(true, forKey: "subscriptionSaved")
}
})
Может ли кто-нибудь также показать мне, как должен выглядеть мой AppDelegate?
Я добавил функцию didReceiveRemoteNotification в свой AppDelegate. Я также вызвал application.registerForRemoteNotifications(). Вот как выглядит моя функция didReceiveRemoteNotification: Мне даже не приходит печать.
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
print("Notification!!")
let notification = CKNotification(fromRemoteNotificationDictionary: userInfo) as? CKDatabaseNotification
if notification != nil {
AppData.checkUpdates(finishClosure: {(result) in
OperationQueue.main.addOperation {
completionHandler(result)
}
})
}
}