D
返回博客列表
iOS

大型混合应用中的 WebView 容器设计

从 JSBridge、权限、生命周期和异常恢复出发,梳理金融移动端容器的关键边界。

3 分钟阅读

在大型混合应用中,WebView 并不是一个简单的网页窗口。它更像一层运行时:连接登录状态、设备能力、页面路由、安全策略和业务生命周期。

容器应该负责什么

容器适合承担跨页面、跨业务的基础能力:

  • 登录态和统一身份认证。
  • 相机、定位、扫码和生物识别。
  • 页面路由、返回策略和缓存。
  • 网络、权限与版本信息。
  • 统一错误页和异常恢复。

具体业务规则应尽量留在业务侧。容器边界越稳定,H5 团队的发布节奏就越独立。

设计可演进的 Bridge

Bridge 接口需要像公开 API 一样被设计。参数、返回值、错误码和版本兼容都应该明确。

struct BridgeResponse<T: Encodable>: Encodable {
    let code: String
    let message: String
    let data: T?
}

不要让成功和失败返回完全不同的数据形状。稳定的响应结构能减少跨端判断,也更容易记录调用链路。

处理版本兼容

H5 的发布速度通常快于客户端。新增能力时应支持能力探测,而不是只比较 App 版本字符串。

const supported = await bridge.canIUse("location.openSettings");

能力探测让灰度发布和旧版本兼容更自然。

生命周期比接口更容易出错

很多线上问题并不是 Bridge 方法本身错误,而是调用发生在错误的时间:页面已经销毁、授权弹窗仍在展示,或者容器刚从后台恢复。

需要特别关注:

  • 页面进入和离开的事件是否成对。
  • 异步回调是否仍对应当前页面。
  • 多个 WebView 是否共享了错误状态。
  • 登录失效后是否可以恢复原路径。

为异常路径设计体验

金融移动场景经常处于弱网、权限受限或设备能力不一致的环境。容器不能只提供错误码,还要提供用户可理解的恢复动作。

一个成熟的容器,价值不在于封装了多少原生方法,而在于它能让复杂业务在不理想的环境中依然可预测。