独立式 Web 应用 (IWA) 在 Web 平台之上提供高度可信赖、安全且版本离散的运行时环境。在生产环境中(尤其是在受管理的组织内),管理员和开发者需要对软件部署进行精细控制。
为满足这些要求,Chrome 为 IWA 提供全面的版本管理功能,包括更新渠道、版本固定和版本降级。这些功能可实现部署可预测性,并为整个用户群提供快速恢复控制。
可用性
版本管理行为取决于 IWA 是由管理员管理的还是由用户直接安装的:
- 受管理的 IWA:自 Chrome 133 起,可以使用管理功能(包括政策驱动的固定和降级)。
- 非受管(用户安装)IWA:面向用户的功能(例如手动选择渠道)从 Chrome 150 开始提供。
会话类型兼容性
所有版本管理功能(包括更新渠道和版本固定)都完全兼容所有 ChromeOS 会话类型。其中包括:
- 标准受管理的用户会话
- 受管理的访客会话 (MGS)
- 专用自助服务终端模式环境
更新渠道
通过使用更新渠道,开发者可以为不同的部署和测试受众群体细分特定的应用 build。如需配置渠道,请向应用更新清单中的每个版本条目添加一个可选的渠道数组字段。这些渠道名称不限于固定的平台关键字(例如 canary 或 stable),而是任意的开发者定义的标识符,必须采用小写 ASCII 字母数字字符串格式(可以包含连字符或下划线,但不能包含空格)。如果某个版本条目完全省略了渠道字段,Chrome 会隐式地将该版本的可用性默认为“默认”渠道。最终,管理政策中指定的频道名称必须与清单中定义的字符串完全一致;任何拼写错误或配置不匹配都会导致系统无法识别任何符合条件的版本,从而有效阻止这些客户端的更新。
清单配置
如需配置渠道,请向Web 应用清单中的每个版本条目添加一个可选的 channels 数组。
以下是一些需要考虑的事项:
- 渠道映射:如果某个版本条目定义了
channels数组,则该版本仅可在指定的渠道上安装。 - 默认回退:如果版本条目完全省略了
channels字段,Chrome 会假定该版本仅属于default渠道。 - 精确字符串匹配:客户端政策配置中指定的渠道名称必须与更新清单中定义的字符串完全一致(区分大小写)。如果没有版本与目标频道名称匹配,应用将无法找到符合条件的更新。
更新清单示例
以下示例展示了支持多个发布渠道的更新清单:
{
"versions": [
{
"version": "0.1.0",
"src": "https://github.com/chromeos/iwa-sink/releases/download/v0.1.0/iwa-sink.swbn",
"channels": ["delta"]
},
{
"version": "0.2.0",
"src": "https://github.com/chromeos/iwa-sink/releases/download/v0.2.0/iwa-sink.swbn",
"channels": ["delta", "default"]
},
{
"version": "0.3.0",
"src": "https://github.com/chromeos/iwa-sink/releases/download/v0.3.0/iwa-sink.swbn",
"channels": ["beta", "delta"]
},
{
"version": "0.4.0",
"src": "https://github.com/chromeos/iwa-sink/releases/download/v0.4.0/iwa-sink.swbn"
}
]
}
根据此清单,每个目标渠道可用的版本如下:
- 默认:
0.2.0、0.4.0(缺少明确的渠道,默认为默认渠道) - 增量:
0.1.0、0.2.0、0.3.0 - Beta 版:
0.3.0
IWA 更新引擎通过查找应用更新清单中的渠道字段来支持定位特定发布渠道。
版本固定
在高合规性或高度稳定的企业环境中,管理员必须确保设备运行的业务关键型软件版本完全一致。版本固定功能可让管理员将 IWA 锁定到特定版本,从而停止所有后续的后台更新。这为企业提供了一种高度可靠的方式来保持稳定的配置并遵守严格的内部或行业法规。
如需将独立式 Web 应用 (IWA) 冻结在特定发布 build 上,企业管理员可以在 IsolatedWebAppInstallForceList 政策中配置 pinned_version 属性。此功能主要通过 Google 管理控制台中应用详情面板内的互动式界面控件进行管理,遵循标准的 IWA 安装工作流程,不过管理员也可以灵活地直接使用原始 JSON 配置来部署这些政策值。管理员成功指定有效版本字符串后,Chrome 会提取该明确指定的软件包,并阻止所有后续的自动向前更新。
特殊行为和限制
- 恢复更新(取消固定):如需恢复自动更新,请移除
pinned_version属性或将其值更改为较新的目标版本。 - 默认情况下不降级:将
pinned_version设置为低于当前已安装版本的版本将不会触发回滚,除非明确启用allow_downgrades。 - 不可用的固定目标版本:如果配置的
pinned_version在指定的更新渠道中缺失,或者比已安装的版本旧(降级已停用),Chrome 将保留当前安装的版本并阻止任何进一步的更新。 - 全新部署:如果受管理的设备上尚未安装 IWA,并且无法检索到指定的 pinned_version 或更新清单中缺少该版本,则 IWA 将无法安装。
版本降级
如果新部署的更新引入了严重 bug 或漏洞,管理员可能需要将设备回滚到之前的稳定状态。Chrome 支持将已安装的受管 IWA 降级到较低版本,而之前该平台仅允许向前更新,因此无法实现此功能。
只有在同时满足以下政策条件时,才能降级:
pinned_version设置为有效的旧版本。allow_downgrades明确设置为 true。
降级的工作原理
- 触发机制:回滚会在常规更新检查周期(每 4-6 小时运行一次)期间处理。
- 幕后:Chrome 会使用更新清单中指定的旧版 Web 软件包 (.swbn) 对 IWA 执行完整重新安装。
渠道过渡逻辑
当通过政策切换应用的定位渠道时,更新引擎会遵循以下特定行为:
方案 A:切换到具有早期版本的渠道
- 如果允许降级:如果 pinned_version 与目标渠道上的旧版本匹配且
allow_downgrades为 true,则会发生回滚(并清除本地用户数据)。 - 如果禁止降级:系统不会进行降级。设备将继续使用当前安装的较高版本,并且只有在新选择的渠道中提供更新版本时才会更新。
场景 B:切换到版本相同的渠道
- 无更改:如果新选择的渠道指向的版本号与当前安装的版本号相同,Chrome 将不会对已安装的软件包进行任何修改。
- 逐字节一致性原则:开发者必须保证不同渠道中相同的版本号包含相同的、字节匹配的代码签名。在不同渠道中以相同的版本字符串部署不同的代码库可能会导致应用状态出现意外的异常情况。
管理政策配置
企业版控制功能通过集中式 Google 管理控制台平台使用 IsolatedWebAppInstallForceList 政策架构强制执行。这些设置可以直接通过管理控制台中的界面控件进行管理,也可以使用原始 JSON 政策配置进行部署。
以下管理政策配置示例演示了更新渠道、版本固定和降级:
政策值表示法
[
{
"update_manifest_url": "https://awesome-kitchen-sink.glitch.me/update.json",
"web_bundle_id": "aiv4bxauvcu3zvbu6r5yynoh4atkzqqaoeof5mwz54b4zfywcrjuoaacai",
"channel": "beta",
"pinned_version": "0.7.0",
"allow_downgrades": true
}
]
架构参数说明
channel(字符串,可选):指示 Chrome 仅评估更新清单中分配给此渠道的版本。如果省略,Chrome 会评估“default”渠道。pinned_version(字符串,可选):将设备明确锁定到指定的版本字符串。后续的自动后台更新会被阻止。allow_downgrades(布尔值,可选):启用回滚功能。 如果为 true 且与有效的旧版pinned_version配对,Chrome 将触发降级重新安装。警告:即使省略pinned_version字段,将此参数设置为 true 也会屏蔽所有标准正向更新。
非受管(用户安装)IWA(从 150 开始)
对于不受管理的用户安装的独立式 Web 应用,版本控制通过用户手动互动来运行:
安装软件包 ──► 用户选择渠道 ──► 自动检查所选渠道
自动更新的清单前提条件
对于用户安装的 IWA,若要使其在后台检查并接收自动定期更新,应用的本地 Web 应用清单(软件包中位于 /.well-known/manifest.webmanifest 的元数据)必须包含有效的 update_manifest_url 字段。
如果应用的本地清单文件中省略了此网址,非受管的更新引擎将永远不会执行后台检查,并且应用将永久冻结在其初始安装版本上。
手动选择渠道
在首次安装非受管 IWA 期间,浏览器会检查更新清单,如果开发者配置了多个渠道,则会直接向用户显示可用的渠道选项(例如“稳定版”“Beta 版”)。
密钥生命周期规则
- 首次安装来源:无论用户在安装时选择哪个渠道,初始安装始终会部署提供的安装软件包中打包的文件。
- 后续更新:安装完成后,系统将仅从所选渠道查询未来的更新。只有当向目标渠道发布的版本高于已安装的版本时,应用才会更新。
- 切换渠道:安装后,如需切换到其他更新渠道,用户必须卸载 IWA 并重新安装,并在安装流程中选择所选渠道。
如何测试受管理的部署
对于通过 Chrome 企业版管理控制台管理设备或直接配置政策的管理员:
- 前往组织设置下的应用详情面板。
- 应用配置属性来测试固定和渠道目标。由于这些控件与标准用户会话、受管理的访客会话 (MGS) 和信息亭完全兼容,因此您可以验证所有目标部署环境中的行为。
- 如需在本地检查更新检查,请在测试客户端上前往
chrome://web-app-internals,手动强制执行更新检查并分析传入的清单数据包。
总结
独立式 Web 应用的安全架构旨在让开发者能够充分发挥自己的能力,同时对应用生命周期行为保持严格的可预测性和控制。通过利用 Chrome 的版本管理功能,开发者和 IT 管理员都可以构建符合严格合规标准和运营目标的强大部署流水线。
在设计和管理应用的更新策略时,请谨记以下核心原则:
- 使用渐进式渠道:通过更新渠道(例如
beta、dev或自定义环)可以逐步收集遥测数据和反馈。这样可确保重大更新在默认渠道中面向大众发布之前,先经过严格的验证。 - 锁定以确保稳定性:在高度结构化或合规性驱动的企业环境中,将关键端点锁定到经过验证的精确 pinned_version,以保护运营免受意外中断或工作流中断的影响。
- 仅在紧急情况下使用降级功能:请注意,版本降级是一项强大的纠正性安全措施,以前无法实现。不过,由于回滚会触发完整重新安装并清除所有本地客户端存储空间(IndexedDB、LocalStorage、Cookie),因此应严格保留用于关键安全补救。对于普通补丁,部署次要前瞻性更新始终是理想的策略。
- 了解政策标志:请注意管理开关;即使未主动定义任何 PIN,开启
allow_downgrades也会停止所有前向更新。 - 建立字节级完整性:确保部署在不同渠道中的相同版本号映射到相同的字节匹配软件包,以避免客户端在渠道之间转换时出现不稳定的应用状态。
通过将这些功能直接集成到更新清单和企业政策架构中,您可以确保可靠、可审核且安全的更新流程,从而保持独立式 Web 应用 (IWA) 生态系统的高信任度保证。