2026-09-19 00:22:04 +08:00
|
|
|
|
import Flutter
|
|
|
|
|
|
import UIKit
|
|
|
|
|
|
|
|
|
|
|
|
@main
|
|
|
|
|
|
@objc class AppDelegate: FlutterAppDelegate, FlutterImplicitEngineDelegate {
|
|
|
|
|
|
override func application(
|
|
|
|
|
|
_ application: UIApplication,
|
|
|
|
|
|
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
|
|
|
|
|
|
) -> Bool {
|
2026-09-19 03:42:49 +08:00
|
|
|
|
// 后台会话启动即重建:App 被系统在后台拉起(Dart 引擎未起)时,
|
|
|
|
|
|
// delegate 回调即可入总线缓存(终态落盘,引擎 onListen 后重放)。
|
|
|
|
|
|
UploadPlugin.shared.ensureSession()
|
2026-09-19 00:22:04 +08:00
|
|
|
|
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func didInitializeImplicitFlutterEngine(_ engineBridge: FlutterImplicitEngineBridge) {
|
|
|
|
|
|
GeneratedPluginRegistrant.register(with: engineBridge.pluginRegistry)
|
2026-09-19 03:42:49 +08:00
|
|
|
|
// 上传桥接(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)
|
|
|
|
|
|
}
|
2026-09-19 00:22:04 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|