import Flutter import UIKit @main @objc class AppDelegate: FlutterAppDelegate, FlutterImplicitEngineDelegate { override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { // 后台会话启动即重建:App 被系统在后台拉起(Dart 引擎未起)时, // delegate 回调即可入总线缓存(终态落盘,引擎 onListen 后重放)。 UploadPlugin.shared.ensureSession() return super.application(application, didFinishLaunchingWithOptions: launchOptions) } func didInitializeImplicitFlutterEngine(_ engineBridge: FlutterImplicitEngineBridge) { GeneratedPluginRegistrant.register(with: engineBridge.pluginRegistry) // 上传桥接(P3 Task 8):MethodChannel 命令 + EventChannel 事件流 // (通道/协议与 Android UploadPlugin 一致,Dart 侧同一 NativeTransport)。 UploadPlugin.register(with: engineBridge.applicationRegistrar.messenger()) } /// 系统完成后台会话事件投递前的拉起回调:暂存 completionHandler, /// 供 urlSessionDidFinishEvents 消费(否则 App 被系统挂起惩罚)。 override func application( _ application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: @escaping () -> Void ) { super.application( application, handleEventsForBackgroundURLSession: identifier, completionHandler: completionHandler) if identifier == UploadBridge.sessionIdentifier { UploadPlugin.shared.ensureSession() UploadPlugin.shared.storeBackgroundCompletionHandler(completionHandler) } } }