FCM Flutter プラグインは、執筆時点まで、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 を使用して、dart と迅速なコードの間で通信しています。
これは 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 をトリガーしているため機能します。
私が望むのは、データ メッセージが到着したときにバックグラウンド作業 (ローカル DB に保存) を行うことです。