Обработка фонового уведомления pu sh на стороне iOS Flbter's Firebase Messaging - PullRequest
0 голосов
/ 04 мая 2020

До момента написания плагина FCM Flutter не реализована фоновая обработка уведомлений pu sh на iOS. Я пытаюсь реализовать с использованием собственного кода (Swift), но я сталкиваюсь с некоторыми трудностями.

Это мой AppDelegate.swift:

import UIKit
import Flutter

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {


override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    if #available(iOS 10.0, *) {

      UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
    }

    let controller : FlutterViewController = window?.rootViewController as! FlutterViewController
    let _platformChannel = FlutterMethodChannel(name: "br.uff.uffmobileplus/uffmobile_channel",
                                                binaryMessenger: controller as! FlutterBinaryMessenger)
    _platformChannel.setMethodCallHandler({
          //omitted code
    })

    GeneratedPluginRegistrant.register(with: self)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}


override func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        let controller : FlutterViewController = window?.rootViewController as! FlutterViewController
        let notificationChannel = FlutterMethodChannel(name: "br.uff.uffmobileplus/notification_channel", binaryMessenger: controller as! FlutterBinaryMessenger)

        notificationChannel.invokeMethod("saveToDataBase", arguments: userInfo)
    completionHandler(UIBackgroundFetchResult.newData)

}

}

(я пропустил какой-то нерелевантный код)

Я видел некоторые нативные реализации iOS, и они что-то сделали рядом с этим. Я не программист Swift, поэтому вообще не знаю, правильно ли это. Происходит то, что

didReceiveRemoteNotification

не вызывается при поступлении удаленного сообщения данных или уведомления.

Я использую platform_channel для связи между дротиком и быстрым кодом.

Это сообщение с данными json:

  "\"data\": {"
    "\"body\": \"$body\","
    "\"title\": \"$title\","
    "\"route\": \"$route\","
    "\"sender\": \"$sender\","
    "\"click_action\": \"FLUTTER_NOTIFICATION_CLICK\","
    "\"mutable_content\": true,"      
    "\"content_available\": true"     
    "}, "
    "\"priority\": \"high\","
    "\"to\": "
    "\"/topics/$group\""

Да, оно написано странно, но работает, потому что запускает onMessage с помощью правильная информация.

Когда я получаю сообщение с данными, мне нужно выполнить фоновую работу (сохранить в локальной БД).

...