启动文字提示,h5调试加入

This commit is contained in:
joywayer
2026-06-24 21:20:05 +08:00
parent 1d231a52ef
commit 06b7686e17
12 changed files with 70 additions and 29 deletions
+17 -11
View File
@@ -267,7 +267,8 @@ final class ExternalSubscriptions {
bridge?.call("getnetwork", data: .string(state.rawValue), callback: nil)
}
lifecycle.onChange = { [weak bridge] state in
bridge?.call("appservice", data: .string(state == .background ? "1" : "2"), callback: nil)
// 沿 msext WKWebView ="2" / ="1"
bridge?.call("appservice", data: .string(state == .background ? "2" : "1"), callback: nil)
}
battery.start(); network.start(); lifecycle.start()
// ,
@@ -1069,18 +1070,20 @@ func sceneDidBecomeActive(_ scene: UIScene) {
}
// LobbyHandlers / SubGameHandlers
// NSNotification 沿 msext WKWebView
// · "2"· "1" Contract.md §3.2 `appservice`
notifications.observe(.appDidEnterBackground) { [bridge] _ in
bridge.call("appservice", data: .string("1"), callback: nil) // :"1"=
bridge.call("appservice", data: .string("2"), callback: nil) // :="2"
}
notifications.observe(.appDidBecomeActive) { [bridge] _ in
bridge.call("appservice", data: .string("2"), callback: nil) // :"2"=
bridge.call("appservice", data: .string("1"), callback: nil) // :="1"
}
```
**0.3s 节流决策**:旧外壳在 `applicationDidBecomeActive` 里设了 `flag=NO` + 0.3s 后恢复,防止双重触发。新外壳**默认不要这个节流**,理由:
1. 节流的根因是旧代码在 `applicationDidBecomeActive` 内被多处触发,新外壳只有 SceneDelegate 一处发通知
2. 测试如果证实双触发,加节流是 1 行代码的事(`DispatchQueue.asyncAfter`),不是架构改动
3. H5 端通常对重复 `appservice("2")` 是幂等的(就是刷新 UI 状态)
3. H5 端通常对重复 `appservice("1")`(回前台)是幂等的(就是刷新 UI 状态)
如真机回归发现 H5 双触发产生问题,在 LobbyHandlers 内加 throttle 即可,不污染 SceneDelegate。
@@ -1253,7 +1256,8 @@ extension BridgeProtocol {
}
func callAppService(_ state: AppState) {
call("appservice", data: .string(state == .background ? "1" : "2"), callback: nil)
// 沿 msext WKWebView ="2" / ="1"
call("appservice", data: .string(state == .background ? "2" : "1"), callback: nil)
}
// ... 15
}
@@ -2231,11 +2235,12 @@ private func runBootPipelineSteps() async throws {
bridge.call("getnetwork", data: .string("\(code)"), callback: nil)
}
// appservice app_* bridge.call
// 沿 msext WKWebView ="2" / ="1"
AppLifecycleObserver.shared.onBackground = {
bridge.call("appservice", data: .string("1"), callback: nil)
bridge.call("appservice", data: .string("2"), callback: nil)
}
AppLifecycleObserver.shared.onForeground = {
bridge.call("appservice", data: .string("2"), callback: nil)
bridge.call("appservice", data: .string("1"), callback: nil)
}
}
```
@@ -2877,12 +2882,13 @@ public struct DeviceHandlers {
networkMonitor.start()
// 4 appservice App
// "1"= / "2"=沿
// "2"= / "1"=沿 msext WKWebView
// Contract.md §3.2 `appservice` NewRootVC.m:1773/1782
appLifecycle.onBackground = { [weak bridge] in
bridge?.call("appservice", data: .string("1"), callback: nil)
bridge?.call("appservice", data: .string("2"), callback: nil)
}
appLifecycle.onForeground = { [weak bridge] in
bridge?.call("appservice", data: .string("2"), callback: nil)
bridge?.call("appservice", data: .string("1"), callback: nil)
}
appLifecycle.start()
}
@@ -4263,7 +4269,7 @@ extension BridgeProtocol {
func callGetPhoneInfo(_ info: [String: String]) { call("getphoneinfo", data: .object(info.mapValues(BridgeData.string)), callback: nil) }
func callGetBattery(_ level: Float) { call("getBattery", data: .string(String(format: "%.2f", level)), callback: nil) }
func callGetNetwork(_ state: NetworkState) { call("getnetwork", data: .string(state.rawValue), callback: nil) } // "1"/"2"/"3"
func callAppService(_ s: AppLifecycleState) { call("appservice", data: .string(s == .background ? "1" : "2"), callback: nil) }
func callAppService(_ s: AppLifecycleState) { call("appservice", data: .string(s == .background ? "2" : "1"), callback: nil) } // 沿 msext WKWebView
func callShakeEnd() { call("shakeEnd", data: nil, callback: nil) }
func callGetLocationInfo(_ d: LocationPayload) { call("getlocationinfo", data: .object(d.dict), callback: nil) } // §3.2 B
func callGameUIPlayVoice(_ user: String) { call("gameui_play_voice", data: .string(user), callback: nil) }