feat: configurable android assetHost + chart-webview reuse fixes & iOS cold-start deeplink#62
feat: configurable android assetHost + chart-webview reuse fixes & iOS cold-start deeplink#62huhuanming wants to merge 17 commits into
Conversation
… cold-start deep-link (OK-55681) LaunchOptionsStore gains an in-memory coldStartLocalNotification slot (JSON userInfo of a tapped LOCAL notification) plus a read-once takeColdStartLocalNotification(). The new Nitro method getAndClearColdStartLocalNotification() returns it and clears it; the host AppDelegate writes the slot via KVC on a killed-app notification tap. In-memory only (no NSUserDefaults): a new process = fresh nil, so it is launch-scoped and cannot replay a stale tap. Android returns "" (taps arrive via Intent extras there). Run yarn nitrogen + yarn prepare before publishing 3.0.54.
- iOS/Android: warm-boot the shared offline page + route page->native callbacks to owner ?? warmDriver so bars-state/load-end aren't dropped while the host that owns the WebView is the offscreen prewarm - source/bridge setters apply synchronously (drop scheduleReconcile, which caused an infinite reconcile loop on Android) - add ChartWV diagnostics via OneKeyLog (depend on ReactNativeNativeLogger) - fix Android compileReleaseKotlin: dispose() needs override
…retries - Android: pause the pooled WebView's renderer (onPause) when no host owns it and resume on claim — Android (unlike iOS WKWebView) never throttles an offscreen WebView, so the warm page burned a CPU core + grew RAM to OOM after leaving the chart. Per-instance onPause (NOT process-global pauseTimers). - attachToContainer: retry reparent up to 12 frames instead of giving up after 1 (a single retry stranded the WebView in the old container -> blank chart slot) - webviewDebuggingEnabled Nitro prop (iOS isInspectable / Android setWebContentsDebuggingEnabled) following the dev-mode toggle (Agent B)
…roid re-entry white-screen/stuck-loading) Pooled WebView re-parented across hosts left a stale parent on dispose, so re-entering a chart showed a white screen / infinite loading (issues 1 & 2). - forceDetach(): endViewTransition + removeView, fallback removeViewInLayout + requestLayout, so the parent is cleared synchronously even on a dead container. - detachFrom(): parent-checked, used by ChartWebview.dispose() for pooled hosts. - attachToContainer(): uses forceDetach, retries via container.post. Retains ChartDBG diagnostic counters (warmDriver/owner setters, throttled per-3s msgIn/native->page RATE, pauseIfIdle SKIP/PAUSE/RESUME) for ongoing on-device verification; to be removed before merge.
…ve logs Remove the ChartDBG diagnostic layer added for the Android root-cause work: - DBG tag, owner/warmDriver transition logs, dbgId getter - throttled msgIn/native->page rate counters + rateLogger handler - pauseIfIdle SKIP verbose log Keep only operational logs under the ChartWebviewPool tag: WebView CREATED/DESTROYED (singleton verification), renderer PAUSE/RESUME, and the attach-failed-after-retries warning. Logging-only change; behavior unchanged.
Address code-review findings on the Android pooled chart WebView: - weak owner/warmDriver refs (mirror iOS) so the immortal pool can't pin a disposed host's ReactContext/Activity - validate assetHost to a bare hostname before it becomes the privileged-bridge origin / WebViewAssetLoader.setDomain; fall back to the built-in host on malformed input - normalize localBundle (trim '/') in computeTargetUrl to avoid double-slash URLs that miss the handler prefix (blank chart) - attach retry uses postDelayed + last-resort forceDetach before giving up, so a stuck old parent can't leave the WebView unparented - log forceDetach failures instead of swallowing them - demote per-switch pause/resume logs to debug
- guard the read-and-clear of coldStartLocalNotification with an os_unfair_lock so a concurrent get-and-clear can't double-drain the deep-link (the exactly-once invariant the method exists to provide) - add a presence-only log on the take path for field diagnosis (never logs the payload)
Introduce safe cleanup routines for APK and bundle artifacts across platforms: add clearApkCache (Android implementation + iOS no-op) and expose it in the Nitro spec; introduce pruneStaleAppVersionBundles on Android and iOS to remove stale onekey-bundle artifacts (extracted dirs, download stages, orphan asc signatures, and stale fallback entries). Implementations are defensive: tolerate missing files, avoid deleting current app/bundle versions, and log progress; bundle pruning returns the count of deleted version directories. These changes help reclaim disk space and avoid leaked stale artifacts after native upgrades.
|
Warning Review the following alerts detected in dependencies. According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.
|
Android app-update: change wipeApkCacheFiles to accept protectedPaths and skip deleting verified/pending-install APKs; clearApkCache now aborts if a download is in progress, collects verified file paths to protect, and logs skipped files to avoid races during native cleanup. Android bundle-update: make deleteDirectory return a boolean (treating missing entries as success and failing on any leftover child), propagate that result to callers and log warnings on incomplete deletes instead of always reporting success. iOS bundle-update: reference appVersionFromStem as Self.appVersionFromStem to use the correct static method scope.
Refresh example/react-native/ios/Podfile.lock to update native module pod specs/checksums and Podfile checksum. Also adjust a comment in ReactNativeBundleUpdate.kt to explicitly reference versioned onekey-bundle/<v> dirs and onekey-bundle-download/<v> stages for clarity.
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub. |
概述
本分支聚合了 chart-webview 离线/复用相关的原生改动、iOS 冷启动本地通知深链能力,以及可配置的 Android assetHost,并 bump 版本到 3.0.57。
主要改动
chart-webview
ChartWebview.nitro.ts)。device-utils
getAndClearColdStartLocalNotification:支持 iOS 冷启动本地通知深链 (OK-55681)。其他
影响范围
ChartWebview.swift,ReactNativeDeviceUtils.swiftChartWebview.kt,PooledChartWebView.kt,ReactNativeDeviceUtils.ktChartWebview.nitro.ts,ReactNativeDeviceUtils.nitro.ts测试