Перейти до вмісту

Генератор і валідатор маніфесту PWA

Заповни форму й отримай manifest.webmanifest разом із тегами для head, або встав маніфест, який уже віддає твій сайт. Обидва проходять той самий чекліст: критерії встановлення Chrome, правила, за якими він обирає вікно встановлення, і поля, які варто виправити.

Працює в браузері. Те, що ти вводиш чи вставляєш, не покидає сторінку.

Згенеруй маніфест

Назва й опис
name У вікні встановлення і на сплеш-екрані.
short_name Підпис під іконкою на головному екрані. Орієнтир — близько 12 символів.
lang Мова name і description, наприклад uk.
description Рядок тексту у високому шиті встановлення Chrome.
Ідентифікатор і URL
id Постійна ідентичність застосунку. / підходить, якщо на домені один застосунок.
start_url Сторінка, що відкривається при запуску.
scope URL, які лишаються у вікні застосунку. start_url має бути всередині.
Вікно й кольори
display browser не підходить для встановлення.
orientation Не задавай, якщо застосунок працює в будь-якій орієнтації.
theme_color Колір тулбару і прев'ю в перемикачі застосунків.
background_color Фон сплеш-екрана на мобільних.
Іконки
Де лежать файли іконок, наприклад /icons/.
Які іконки додати

Для критеріїв встановлення Chrome потрібні іконки 192 і 512. Maskable заповнює адаптивні форми Android; тримай логотип у центральних 80%.

Скріншоти (необов'язково)

Вузький скріншот перемикає Chrome на Android на високий шит встановлення, широкий — те саме на десктопі. Залиш обидва вимкненими, щоб лишилося компактне вікно.

Його показує Chrome на Android.
Ширина x висота в пікселях, наприклад 1080x1920.
Його показує Chrome на десктопі.
Ширина x висота в пікселях, наприклад 1920x1080.

Твій маніфест

Поклади його в корінь сайту як manifest.webmanifest — туди вказують теги нижче.

{
  "name": "Aurora Play",
  "short_name": "Aurora",
  "description": "Щоденні турніри, бонуси й акаунт — в один тап із головного екрана.",
  "lang": "uk",
  "id": "/",
  "start_url": "/",
  "scope": "/",
  "display": "standalone",
  "theme_color": "#0b0d14",
  "background_color": "#0b0d14",
  "icons": [
    {
      "src": "/icons/icon-192.png",
      "sizes": "192x192",
      "type": "image/png",
      "purpose": "any"
    },
    {
      "src": "/icons/icon-512.png",
      "sizes": "512x512",
      "type": "image/png",
      "purpose": "any"
    },
    {
      "src": "/icons/icon-512-maskable.png",
      "sizes": "512x512",
      "type": "image/png",
      "purpose": "maskable"
    }
  ]
}

Теги для HTML head

Додай їх на кожну сторінку застосунку. apple-touch-icon потрібен для Safari на iOS; зазвичай це 180×180.

<link rel="manifest" href="/manifest.webmanifest">
<meta name="theme-color" content="#0b0d14">
<link rel="apple-touch-icon" href="/icons/apple-touch-icon.png">

Чекліст

Відповідає всім 5 критеріям встановлення Chrome, які стосуються маніфесту. Живий сайт ще має пройти те, чого ця сторінка перевірити не може.

Помилки: 0 · Попередження: 0 · Пройдено: 12 · Примітки: 2

Критерії встановлення Chrome

Частина списку Chrome, яка стосується самого маніфесту.

  • Пройдено name або short_name Задано: name, short_name.
  • Пройдено icons: 192px і 512px Оголошено іконки 192×192 і 512×512.
  • Пройдено start_url Задано: /.
  • Пройдено display standalone підходить для встановлення.
  • Пройдено prefer_related_applications Не дорівнює true.

Вікно встановлення

Яке з двох вікон встановлення Chrome отримає цей маніфест.

  • Примітка Вікно на Android Скріншотів немає, тож Android покаже компактне вікно.
  • Примітка Вікно на десктопі Широких скріншотів немає, тож Chrome на десктопі покаже стандартне вікно.
  • Пройдено description Символів: 66. Заповнює рядок тексту у високому шиті.

Варто виправити

Для встановлення не обов'язково, але людина побачить результат.

  • Пройдено Довжина short_name Символів: 6 — вміщається на більшості головних екранів.
  • Пройдено scope start_url / всередині scope /.
  • Пройдено id Задано: /. Застосунок збереже ідентичність, якщо start_url зміниться.
  • Пройдено Maskable-іконка Є. Android зможе заповнити адаптивні форми іконки.
  • Пройдено theme_color #0b0d14 — валідний колір.
  • Пройдено background_color #0b0d14 — валідний колір.

Перевір наявний маніфест

Відкрий URL свого маніфесту в браузері, скопіюй файл повністю і встав сюди. Перевірка працює на цій сторінці, нічого не завантажується.

Увесь файл, від першої { до останньої }.

Чекліст

Результати з'являться тут після перевірки.

Чого перевірка маніфесту не доведе

Чистий чекліст означає, що файл відповідає правилам Chrome. Він не доводить, що застосунок встановлюється: це залежить ще й від живого сайту.

HTTPS
Chrome пропонує встановлення лише на сторінках, відданих по HTTPS.
Файли іконок
Сторінка читає розміри, які ти оголосив. Вона не може підтвердити, що файли існують і справді мають 192 і 512 пікселів; що Chrome реально завантажив, видно в DevTools → Application → Manifest.
Тег і відповідь сервера
На кожній сторінці потрібен тег <link rel="manifest">, а файл має завантажитися й розпарситися. Chrome запитує його без credentials, якщо в тегу немає crossorigin="use-credentials".
Service worker
Поточні критерії встановлення Chrome його вже не містять, але офлайн-сторінки, кеш і push без нього не працюють, а твій ця сторінка не бачить.
Сам візит
Chrome також чекає на клік або тап і 30 секунд на сторінці й не пропонує встановити вже встановлений застосунок.

Поля маніфесту і що з ними робить Chrome

Назви й значення полів — за довідником MDN по Web App Manifest; поведінка Chrome — за документацією самого Chrome.

ПолеЩо робитьЩо з ним робить Chrome
name / short_nameНазва застосунку; short_name — там, де мало місця, наприклад під іконкою на головному екрані.Для встановлення потрібне одне з двох. Сплеш-екран показує name.
iconsЗображення для головного екрана, лаунчера, перемикача застосунків і сплеш-екрана.Для встановлення потрібні іконки 192px і 512px. Без maskable Android кладе іконку на білий фон.
start_urlСторінка, що відкривається при запуску.Обов'язковий для встановлення. start_url з іншого origin ігнорується на користь сторінки, з якої почалося встановлення.
scopeURL, які належать застосунку.Сторінки поза ним показують інтерфейс браузера у вікні застосунку. Якщо start_url не всередині scope, scope ігнорується.
idПостійна ідентичність застосунку.Без нього ідентичність береться зі start_url, тож зміна start_url згодом може зареєструвати другий застосунок.
displayСкільки інтерфейсу браузера лишається у вікні застосунку.fullscreen, standalone, minimal-ui або window-controls-overlay підходять для встановлення; browser — ні.
orientationОрієнтація за замовчуванням.Застосовується при відкритті; без неї застосунок слідує пристрою і налаштуванням користувача.
theme_colorКолір тулбару і перемикача застосунків.Фарбує тулбар застосунку. Тримай його рівним мета-тегу theme-color.
background_colorФон сплеш-екрана.Використовується на сплеш-екрані на мобільних. Збіг із фоном сторінки дає плавний старт.
descriptionКороткий опис застосунку.Заповнює рядок тексту у високому шиті встановлення; обрізається після 300 символів.
screenshotsЗнімки застосунку в роботі.Придатні записи вмикають високий шит: широкі — на десктопі, вузькі або без form_factor — на Android.
prefer_related_applicationsВідправляє користувачів до нативного застосунку.true на Android веде в Play Store по застосунок із related_applications замість встановлення PWA.
langМова name і description.За MDN, браузери lang поки не реалізують; додавати його не шкодить.

Розширене чи компактне вікно встановлення

Chrome показує одне з двох вікон встановлення, і обирає його маніфест. Якщо є хоч один скріншот, який Chrome може використати, відкривається високий шит із галереєю. Якщо немає — невелика картка з іконкою, назвою, доменом і кнопкою Install.

description формат не обирає. Він лише заповнює рядок тексту у високому шиті, тож видалення опису компактну картку не поверне. На десктопі рахуються лише широкі скріншоти; Android широкі ігнорує й показує вузькі або ті, що без form_factor.

Яке вікно дає більше встановлень, публічно ніхто не міряв. Обирай свідомо й перевір на своєму трафіку.

Читати: два вікна встановлення Chrome поруч

Де маніфести зазвичай ламаються

  1. 1

    Розміри, яких немає у файлі

    sizes — це обіцянка, а не вимір. Запис 512x512, що вказує на файл 256px, пройде будь-яку перевірку маніфесту. Експортуй кожен файл у тому розмірі, який оголошуєш.

  2. 2

    Зміна start_url без id

    Без id ідентичність застосунку — це start_url. Перенесеш його, і браузер сприйме новий маніфест як інший застосунок, тож у людини можуть опинитися дві іконки.

  3. 3

    Click ID у start_url

    MDN попереджає: start_url з даними конкретного користувача, як ?user=123, стає постійним відбитком. Тримай click ID у трекері, а не в URL запуску.

  4. 4

    Видалення іконок заради компактного вікна

    Іконки вирішують, чи буде встановлення взагалі. Для компактного вікна прибери скріншоти; прибереш іконки — не з'явиться жодне вікно.

Більше про вікно встановлення і воронку навколо нього.

Досить правити маніфест руками під кожну PWA.

DarkCore збирає маніфест для кожної PWA. Розширене чи компактне вікно встановлення — це перемикач, який ти вмикаєш і міряєш, а встановлення, відкриття й перехід на офер рахуються окремими подіями.

Показати флоу встановлення