Чтобы перенести установленное веб-приложение (PWA) в новый источник, обычно требуется вручную удалить старое приложение и установить новое. При этом обычно теряется интеграция на уровне ОС, например ярлыки на панели задач и разрешения на уведомления. Функция Web App Origin Migration автоматизирует этот переход, устанавливая безопасную передачу между старым и новым источниками.
Перенос выполняется в два этапа: новый сайт заявляет, что старый сайт является его предшественником, а старый сайт подтверждает, что новый сайт является его преемником.
Важные ограничения
Реализация
1. Проверка статуса Same-Site
ОБЯЗАТЕЛЬНО. И старый, и новый источник должны быть одинаковыми сайтами. У них должен быть один и тот же регистрируемый домен (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" не удаляет старое приложение без уведомления. Браузер предложит пользователю обновить приложение до новой версии или полностью удалить его.
Резервные объявления и поддержка браузеров
Запрос на переустановку вручную
В браузерах, которые не поддерживают автоматический перенос, пользователь останется на старой установке. Вам следует добавить на старый сайт элемент интерфейса (например, баннер с уведомлением), который будет направлять пользователей на новый сайт.
Настройки пользователя не будут перенесены, а старое приложение не будет удалено автоматически.