Flutter: обработчик фона уведомлений iOS

#flutter #google-cloud-firestore

#flutter #google-cloud-firestore

Вопрос:

Как обрабатывать фоновое уведомление iOS click_action, когда оно равно нулю?

 {
 "to" : "abcd1234",
 "collapse_key" : "type_a",
 "notification" : {
     "title": "Testing",
     "body" : "Testing 1 2 3 4 5 6 7"
 },
 "data" : {
     "click_action": "FLUTTER_NOTIFICATION_CLICK",
     "route": "/Home",
 }
}
  
 onBackgroundMessage: Platform.isAndroid ? BackgroundHandler.backgroundHandler : null
  

В этом посте упоминается , что onBackgroundMessage не реализован в iOS, просто используется для Android. Есть ли способ обработки в iOS? Спасибо.

Ответ №1:

ДА.

Если вы выполнили все настройки ios firebase с помощью XCode, вы можете использовать встроенные функции swift для прослушивания фоновых уведомлений на iOS.

Внутри вашего AppDelegate класса,

  override func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
    
    }
    
    override func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
                              fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        
        /// Here you will get the silent background notification .
        /// May be you can call you flutter code from here if you need.
        /// Make sure that you end your processing quickly, else you will not get the background notification regularly and timely from iOS.


        /// After you completed, make sure you call the completionHandler so that iOS knows you are done with your background task and you completed it so quickly.

        completionHandler(UIBackgroundFetchResult.newData)
        
    }


  

Команда FlutterFire работает над этим, чтобы перейти на сторону flutter, и вы можете ожидать этого очень скоро, я думаю, посмотрев на их PR на GitHub.

Комментарии:

1. Могу ли я узнать, чем отличается эта функция 2? Как вы можете видеть, вторая функция получила completionHandler().

2. Я не уверен, но я думаю, что если у вас есть данные для извлечения из удаленного уведомления, т. Е. Для параметра content-available установлено значение true, будет вызван тот, у которого есть completionHandler. Другой может быть для обычной обработки уведомлений. Пожалуйста, прочитайте документы для ясности.