Обработка уведомлений из общедоступной, частной и общей базы данных в didReceiveRemoteNotification
Я обрабатываю уведомления как частных, так и общих баз данных путем преобразования userInfo в CKDatabaseNotification. Но я получаю уведомления общедоступной базы данных также в методе didReceiveRemoteNotification, а код шаблона Apple не показывает, как его обрабатывать, и вызывает фатальную ошибку. Как я могу обрабатывать уведомления общедоступной базы данных с помощью метода fetchChanges?
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
let dict = userInfo as! [String: NSObject]
guard let vc = self.window?.rootViewController as? UIViewController else { return }
guard let notification:CKDatabaseNotification = CKNotification(fromRemoteNotificationDictionary:dict) as? CKDatabaseNotification else { return }
self.fetchChanges(in: notification.databaseScope) {
completionHandler(UIBackgroundFetchResult.newData)
}
}
func fetchChanges(in databaseScope: CKDatabaseScope, completion: @escaping () -> Void) {
switch databaseScope {
case .private:
self.fetchPrivateChanges(completion: completion)
case .shared:
self.fetchSharedChanges(completion:) { status in
if (status == false) {
return
}
}
case .public:
fatalError()
}
}
1 ответ
Вы можете просто изменить case .public
к default:
в вашем switch
заявление, поскольку если оно не является частным или общим, то оно должно быть общедоступным.
Кроме того, для ясности вам не обязательно иметь fatalError()
там. Если это вызывает у вас горе, удалите это и сделайте что-нибудь с уведомлением.
Еще я проверяю идентификатор подписки в didReceiveRemoteNotification
чтобы узнать больше о том, что мне с ним делать. Получить его можно так:
if let sub = notification.subscriptionID{
print(sub) //Prints the subscription ID
}
Надеюсь, это поможет.:)