Обработка уведомлений из общедоступной, частной и общей базы данных в 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
}

Надеюсь, это поможет.:)

Другие вопросы по тегам