Перенос источника установленного веб-приложения

Чтобы перенести установленное веб-приложение (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" не удаляет старое приложение без уведомления. Браузер предложит пользователю обновить приложение до новой версии или полностью удалить его.

Резервные объявления и поддержка браузеров

Запрос на переустановку вручную

В браузерах, которые не поддерживают автоматический перенос, пользователь останется на старой установке. Вам следует добавить на старый сайт элемент интерфейса (например, баннер с уведомлением), который будет направлять пользователей на новый сайт.

Настройки пользователя не будут перенесены, а старое приложение не будет удалено автоматически.