До момента написания плагина 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 с помощью правильная информация.
Когда я получаю сообщение с данными, мне нужно выполнить фоновую работу (сохранить в локальной БД).