Откройте две свои PWA на одном Android-телефоне и нажмите Install в каждой. Есть неплохие шансы, что вы увидите два разных окна. Одно — небольшая карточка посреди экрана: иконка, название, домен, Cancel, Install. Другое — высокий шит, выезжающий снизу, с описанием и горизонтальной лентой скриншотов приложения.
Ни одно из них никто в вашей команде не выбирал. Выбрал Chromium — и выбрал по вашему манифесту.
Решает одно поле
Переключатель — это screenshots. Если в Web App Manifest есть хотя бы одна запись в этом массиве, Chromium меняет компактное окно на высокий шит и рисует внутри него ту самую галерею. Уберите поле — вернётся компактное окно.
description формат не определяет. Оно лишь заполняет текстовый абзац внутри высокого шита: есть description — у шита есть строка описания, нет — тот же шит без этой строки.
Проверено на Chrome 113 / Android 14, одно устройство, одна страница, между прогонами менялся только манифест:
screenshots | description | Что показывает Chromium |
|---|---|---|
| есть | есть | высокий шит, галерея, строка описания |
| есть | нет | высокий шит, галерея, без строки описания |
| нет | есть | компактное окно |
| нет | нет | компактное окно |
Последняя пара — самая важная. Если вы уберёте описание в надежде вернуть маленькое окно, не произойдёт ничего: вы просто потеряете нормальное поле манифеста и останетесь с шитом.
Документация Chrome просит ставить form_factor: "narrow" на записи, предназначенные для телефонов; все кадры здесь сняты именно с narrow-записями в реальном пиксельном размере. Скриншот, чьи заявленные sizes не совпадают с файлом, — ошибка того же класса, что и неверно объявленная иконка, и её стоит исправить независимо от того, какое окно вам нужно.
Два окна, одно приложение, один телефон


Оба кадра настоящие, сняты с одного и того же демо-приложения на одном устройстве с разницей в несколько секунд и обрезаны по диалог. Страница позади идентична. Единственная разница между прогонами — был ли screenshots в манифесте.
Что на самом деле меняется для человека с телефоном в руке
Визуальная разница очевидна. Значение имеют различия во взаимодействии — и их можно измерить. На экране 1080×2220:
| Высокий шит | Компактное окно | |
|---|---|---|
| Начинается на | 37% высоты экрана | 42% высоты экрана |
| Перекрывает | 63% экрана, обрезан нижним краем | 22% экрана |
| Кнопка Install | пилюля в правом верхнем углу шита, ~39% высоты | текстовая кнопка, ~60% высоты |
| Прокручиваемое содержимое внутри | да — галерея, и сам шит тянется | нет |
| Способы закрыть | тап мимо, потянуть шит вниз, назад | тап мимо, Cancel, назад |
Из этой таблицы следуют три вещи.
Шит приглашает ко второму решению. Галерея — это контент. Контент просит, чтобы на него посмотрели, а горизонтальная лента просит, чтобы её листали. Вы поставили объект для просмотра между человеком и кнопкой, к которой он уже тянулся. Компактное окно предлагает ровно два действия и никакого третьего.
Кнопка Install переезжает вверх, а не вниз. В высоком шите пилюля Install стоит примерно на 39% высоты экрана, в правом верхнем углу шита. В компактном окне — примерно на 60%, в удобной зоне большого пальца на крупном телефоне. Выше — здесь не лучше; это просто дальше от пальца.
Шит тянется, а тянуть — это то, как телефоны закрывают вещи. Человек, который коснулся шита и повёл палец вниз, только что отменил установку. Тот же жест на компактном окне не делает ничего.
Почему это приходится на худший момент
Всё до окна — ваше: текст, галерея, CTA. Вы весь визит строите намерение ради одного тапа. Окно — первый момент, когда браузер забирает экран себе, и последний момент перед тем, как установка действительно произойдёт.
Это плохое место, чтобы добавлять новую поверхность для просмотра. Человек уже принял решение, которого просила ваша страница. То, что окно покажет дальше, может либо подтвердить это решение, либо перебить его — а галерея внутри шита дублирует ту, которую посетитель уже пролистал на странице, так что подтверждения там, по сути, не предлагают.
Это не повод паниковать. Это повод знать, что именно вы отдаёте в продакшн.
Как проверить, что у вас сейчас
Три способа, от самого дешёвого.
Прочитайте собственный манифест. Откройте URL манифеста вашей PWA в любом браузере и найдите screenshots. Если массив есть и не пуст — у вас высокий шит.
curl -s https://ваш-домен.example/manifest.json | grep -c '"screenshots"'
Посмотрите в DevTools. Подключите телефон, откройте chrome://inspect и прочитайте панель Application → Manifest. Там видны распознанные скриншоты и предупреждения о тех, которые Chromium отбросил — отброшенный скриншот для этой задачи ровно такой же, как отсутствующий.
Поставьте приложение сами. Ничто не заменит одну настоящую установку на настоящем устройстве раз в релиз. Окно установки — единственный экран воронки, которого вы не увидите в аналитике.
Как переключить
Убрать массив screenshots из манифеста — это всё изменение. Остальное оставьте: иконки решают, появится ли промпт вообще, а описание — нормальное поле манифеста, которому там место.
Это стоит сказать прямо, потому что эти вещи легко перепутать. Удаление иконок не даст вам компактного окна — оно сделает приложение непригодным к установке, и не появится никакого окна.
В DarkCore это настройка уровня PWA, а не правка манифеста. В блоке «Хуки конверсии» есть переключатель Расширенное окно установки, и по умолчанию он выключен: манифест уходит без скриншотов, и посетитель видит компактное окно. Включите — манифест понесёт вашу галерею в шит.
В любом случае страница стора сохраняет свою галерею неизменной. Chromium читает не галерею на странице, а только манифест, поэтому переключатель ничего не стоит визуально до тапа.
Чего мы ещё не знаем — и никто не знает
Мы не измеряли, какое окно конвертит лучше. Насколько нам известно, публично этого не измерял никто.
Аргумент за компактное окно — тот, что выше: меньше конкурирующих действий, кнопка ближе к пальцу, нет закрытия перетаскиванием. Аргумент за высокий шит — скриншоты успокаивают человека, который в одном тапе от установки чего-то с домена, о котором он никогда не слышал. Оба правдоподобны. Рассудить может только ваш трафик, и ответ вполне может отличаться по гео и вертикали.
Если будете тестировать — тестируйте нормально:
- одна переменная: формат окна, больше ничего на странице;
- разрез по устройству и браузеру, потому что ни одно из этих окон не показывает никто, кроме Chromium, а в in-app браузерах нет ни одного;
- измеряйте install на тап, а не install на клик, чтобы процент выхода из webview не съел всё сравнение;
- держите тест достаточно долго, чтобы он пережил выходные.
Суть этой статьи не в том, что какое-то окно побеждает. Суть в том, что до сегодняшнего дня вы отдавали то, которое случайно выбрала ваша загрузка скриншотов — а это странная вещь, чтобы оставлять на волю случая на последнем экране перед установкой.
Что читать дальше
- PWA-приложения в арбитраже трафика: воронка от клика до FTD — где установка стоит в более широкой воронке
- Почему ссылка открывает браузер вместо приложения — внутри in-app браузера окна установки не существует
- Фолбек на стор, когда приложение не установлено — что делать с теми, кто до окна не дошёл
- Как выбрать PWA-сервис для арбитража — на что смотреть, кроме экрана установки