将已安装的 Web 应用 (PWA) 转移到新源通常需要用户手动卸载旧应用并重新安装新应用。此过程通常会导致操作系统级集成(例如任务栏快捷方式和通知权限)丢失。Web 应用源迁移功能通过在旧源和新源之间建立安全交接,实现此过渡的自动化。
迁移是一个两步验证流程:新版协作平台网站声明旧网站是其前身,旧网站授权新版协作平台网站作为其继任者。
重要限制
实现步骤
1. 验证“同站”状态
强制性要求:新旧源站必须是“同站”。它们必须共用同一个可注册网域 (eTLD+1)。
- 允许:从
app.example.com迁移到new.example.com(两者共享example.com)。 - 允许:从
example.com/app1迁移到example.com/app2。 - 禁止:从
example.com迁移到example.org(不同的可注册网域)。
2. 配置新应用
新应用必须声明其前身。新应用必须具有 id。
在新网站的 manifest.json 中,添加 migrate_from 字段:
{
"name": "My New App",
"id": "/demo.html",
"start_url": "/demo.html",
"migrate_from": [
{
"id": "https://old-app.example.com/"
}
]
}
3. 在旧源设备上授权迁移
旧源必须明确授权迁移,以防止源劫持。创建一个从 .well-known 目录传送的配置文件。
文件位置:https://old-app.example.com/.well-known/web-app-origin-association
{
"https://new-app.example.com": {
"allow_migration": true
}
}
4. 主动发出迁移信号(可选)
如需立即为现有用户触发迁移,而无需等待他们访问新版协作平台网站,请使用 migrate_to 提示更新旧网站的清单。
{
"migrate_to": [
{
"id": "https://new-app.example.com/",
"install_url": "https://new-app.example.com/demo.html"
}
]
}
5. 要求用户迁移(可选)
默认情况下,系统会向用户建议迁移。如需强制执行过渡,请在新应用的清单中将 behavior 设置为 force。
{
"migrate_from": [
{
"id": "https://old-app.example.com/",
"behavior": "force"
}
]
}
注意:behavior: "force" 不会静默删除旧应用。浏览器会向用户显示一个对话框,要求他们更新到新版本或完全移除该应用。
后备和浏览器支持
手动重新安装提示
对于不支持自动迁移的浏览器,用户将继续使用旧版安装。您应在旧源上实现一个界面元素(例如通知横幅),将用户引导至新版协作平台网站。
用户的设置不会迁移,旧应用也不会自动卸载。