Обработка фоновых push-уведомлений на стороне iOS Flutter Firebase Messaging
До момента написания плагина FCM Flutter не реализовывала фоновую обработку push-уведомлений на 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 с правильной информацией.
Я хочу выполнить фоновую работу (сохранить в моей локальной БД), когда приходит сообщение с данными.