Files
photo-live/apps/mobile/ios/Runner/AppDelegate.swift
T

39 lines
1.7 KiB
Swift
Raw Normal View History

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)
}
}
}