Установка PWA: перехват beforeinstallprompt, кастомный баннер, аналитика

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

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Установка PWA: перехват beforeinstallprompt, кастомный баннер, аналитика
Средний
от 1 дня до 3 дней
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1358
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1251
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    957
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1188
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    929
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    947

Представьте: сайт с 10 000 посетителей в день, но возвращается лишь каждый двадцатый. Add to Home Screen способен поднять возвраты до 30% — если обойти технические ловушки: невалидный манифест, игнорирование iOS, отсутствие аналитики. Мы с 10-летним опытом внедрения PWA реализовали более 50 таких проектов — от интернет-магазинов до SaaS. Конверсия установки достигает 40% при грамотном перехвате beforeinstallprompt и адаптации баннера под платформу.

Экономия бюджета по сравнению с нативным приложением достигает 70% — это тысячи долларов, которые можно направить на улучшение продукта. Разберём, как настроить кастомный промпт, обойти ограничения Safari и встроить воронку установок в GA4.

Почему beforeinstallprompt — не единственный способ?

Chrome и Edge генерируют событие beforeinstallprompt только после того, как удостоверятся, что PWA соответствует критериям: HTTPS, Service Worker, манифест и достаточное время взаимодействия. Событие можно перехватить и показать кастомный баннер в удобный момент — например, после оформления заказа или просмотра третьей страницы. Типичная конверсия такого промпта — 20–40% у мотивированной аудитории.

let deferredPrompt = null;

window.addEventListener('beforeinstallprompt', (e) => {
  e.preventDefault();
  deferredPrompt = e;
  showInstallBanner();
});

async function triggerInstall() {
  if (!deferredPrompt) return;
  deferredPrompt.prompt();
  const { outcome } = await deferredPrompt.userChoice;
  gtag('event', 'pwa_install', {
    event_category: 'PWA',
    event_label: outcome,
  });
  deferredPrompt = null;
  hideInstallBanner();
}

window.addEventListener('appinstalled', () => {
  hideInstallBanner();
  deferredPrompt = null;
});

Как повысить конверсию установки PWA на iOS?

На iOS никакого beforeinstallprompt нет. Safari принципиально не поддерживает автоматическую установку — только ручное добавление через меню «Поделиться». Выход — показывать кастомный баннер с пошаговой инструкцией, используя точную иконку кнопки Share. Наша команда разработала шаблон такого баннера, который повышает конверсию установок на iOS до 15%.

function shouldShowIOSPrompt() {
  const isIOS = /iphone|ipad|ipod/i.test(navigator.userAgent);
  const isInStandaloneMode = window.navigator.standalone === true;
  const hasSeenPrompt = localStorage.getItem('ios-install-prompt-shown');
  return isIOS && !isInStandaloneMode && !hasSeenPrompt;
}

if (shouldShowIOSPrompt()) {
  showIOSInstructionBanner();
  localStorage.setItem('ios-install-prompt-shown', 'true');
}

Как определить режим запуска?

function getDisplayMode() {
  if (window.matchMedia('(display-mode: standalone)').matches) return 'standalone';
  if (window.matchMedia('(display-mode: fullscreen)').matches) return 'fullscreen';
  if (window.navigator.standalone === true) return 'standalone-ios';
  return 'browser';
}

Что такое манифест и как его настроить?

Без правильного манифеста PWA не работает. Обязательные поля: name, short_name, start_url, display, icons. Советуем добавлять purpose: "maskable" для иконок — это позволит Android адаптировать их под разные формы. В современных версиях Chrome полезны screenshots: они делают диалог установки убедительнее. Подробнее о формате манифеста — на MDN.

Поле Обязательно Описание
name да Отображаемое название приложения
short_name да Сокращённое название под иконкой
start_url да URL, открываемый при запуске
display да Режим отображения (standalone, fullscreen)
icons да Массив иконок с разными размерами
screenshots нет Скриншоты для улучшения диалога установки
{"name":"Название","short_name":"Приложение","start_url":"/?source=pwa","display":"standalone","icons":[{"src":"/icons/icon-192.png","sizes":"192x192","type":"image/png","purpose":"any maskable"},{"src":"/icons/icon-512.png","sizes":"512x512","type":"image/png","purpose":"any maskable"}],"screenshots":[{"src":"/screenshots/desktop.png","sizes":"1280x720","form_factor":"wide"},{"src":"/screenshots/mobile.png","sizes":"390x844","form_factor":"narrow"}]}

PWA vs нативное приложение: что выбрать?

PWA обходится в 3–5 раз дешевле нативного приложения при сопоставимом UX. Разработка нативного приложения стоит значительно дороже, а PWA не требует модерации App Store и мгновенно обновляется. Однако PWA не имеет доступа к некоторым системным API (например, Bluetooth). Если ваша целевая аудитория активна на iOS, обязательно добавляйте кастомный баннер для ручной установки. Получите консультацию — мы бесплатно оценим ваш проект и покажем кейсы внедрения.

Как отслеживать установки в GA4?

  1. Установите GA4 на сайт (через gtag или GTM).
  2. В обработчике beforeinstallprompt добавьте событие pwa_prompt_shown.
  3. При клике на кнопку установки отправляйте pwa_install_click.
  4. После appinstalled отправляйте pwa_installed с метаданными.
  5. Настройте конверсии в GA4: цель «Установка PWA» — событие pwa_installed.

Типичная воронка: показ баннера → клик → системный промпт → установка. Конверсия от клика до установки — 50–70%.

Какие типичные проблемы возникают при внедрении?

Если beforeinstallprompt не срабатывает, причина чаще всего в отсутствии HTTPS, Service Worker или манифеста. На iOS нет автоматического промпта — требуется кастомный баннер с инструкцией. Если не отслеживаете установки, добавьте обработчик appinstalled. Все эти ситуации решаются за 2–3 дня стандартной работы.

Что входит в нашу работу

Этап Что делаем Результат
Анализ Проверяем текущий сайт на соответствие критериям PWA Отчет с рекомендациями
Реализация Создаем манифест, Service Worker, кастомный баннер Готовое решение
Тестирование Проверяем на Android, iOS, Desktop Исправление багов
Аналитика Интегрируем воронку установок в GA4 Данные для оптимизации
Документация Передаем описание и конфиги Легкая поддержка

Сроки и гарантии

  • Базовая реализация (манифест + Service Worker + перехват события): 1 день
  • Кастомный баннер с аналитикой: +1 день
  • Поддержка iOS (инструкция + определение режима): +0.5 дня
  • Иконки maskable и адаптация дизайна: +0.5 дня

Итого 2–3 дня от начала до готового решения с аналитикой. Гарантируем стабильную работу на всех платформах и конфиденциальность ваших данных. Свяжитесь с нами, чтобы обсудить задачу. Закажите внедрение PWA сегодня и увеличьте возвраты на 30%.

Когда приложение не открывается без интернета, пользователь уходит к конкурентам

PWA превращает сайт в надёжное приложение, которое работает даже в офлайне, отправляет push-уведомления и устанавливается на главный экран. Разработка PWA приложений — это внедрение Service Worker, настройка кэш-стратегий и интеграция Web Push. В отличие от нативных приложений, вам не нужны две команды под iOS и Android — один код работает во всех современных браузерах. Закажите аудит вашего проекта на PWA-совместимость — мы бесплатно оценим потенциал и сроки.

Как Service Worker управляет сетевыми запросами?

Service Worker — это JavaScript-прокси между браузером и сетью. Работает в отдельном потоке, перехватывает запросы и решает, откуда их отдавать: из кэша, из сети или комбинацией. Разберём три базовые стратегии на реальных сценариях.

Стратегия кэширования Использование Поведение при офлайн
Cache First статика (CSS/JS с content hash) отдаётся из кэша, мгновенно
Network First API, заказы, новости сначала сеть, при ошибке — кэш
Stale While Revalidate контент соцсетей, лента страниц сразу кэш, потом обновление

Cache First применяется для ассетов с хешем в имени — файл никогда не изменится, можно кэшировать навсегда. Stale While Revalidate оптимальна для контента, где допустима небольшая задержка актуализации. Workbox от Google автоматизирует версионирование кэша и инвалидацию — без него корректный Service Worker потребует 300+ строк кода с нетривиальными edge cases. Vite + vite-plugin-pwa генерирует Service Worker из конфига, включая precaching статики.

import { VitePWA } from 'vite-plugin-pwa';
export default {
  plugins: [
    VitePWA({
      registerType: 'autoUpdate',
      includeAssets: ['favicon.ico'],
      manifest: { /* name, icons, start_url, display */ },
      workbox: {
        globPatterns: ['**/*.{js,css,html,ico,png,svg}'],
        runtimeCaching: [
          { urlPattern: /^https?:\/\/api\./,
            handler: 'NetworkFirst',
            options: { cacheName: 'api-cache' }
          }
        ]
      }
    })
  ]
};

Как офлайн-режим реализуется на практике?

«Работает офлайн» для разных продуктов означает разное. Вот три типовых сценария.

  • Офлайн-чтение (новостные сайты, документация): Service Worker кэширует страницы при первом визите, стратегия Stale While Revalidate + Background Sync для синхронизации после восстановления соединения.
  • Офлайн-редактирование (заметки, задачи): IndexedDB хранит локальные данные, Background Sync API ставит операции в очередь — браузер синхронизирует сам, даже если вкладка закрыта. Ограничение: Background Sync поддерживается только в Chromium.
  • Офлайн-форма: пользователь нажал «Отправить» без интернета — данные не теряются, а ставятся в очередь и отправляются автоматически. Для медицинских и страховых форм это критично.

Проблема, о которой часто забывают: конфликты при синхронизации. Если пользователь А редактировал запись офлайн, а пользователь Б изменил её онлайн — нужна стратегия разрешения (last-write-wins, three-way merge или показ конфликта пользователю). Мы прорабатываем эти сценарии на этапе проектирования.

Как работают Web Push-уведомления?

Web Push доставляет сообщения через браузер + Push Service (FCM для Chrome/Edge, APNs для Safari). Пользователь даёт разрешение → браузер подписывается на Push Service → вы получаете endpoint и ключи → отправляете сообщение → Push Service доставляет в браузер. Реализация через библиотеку web-push (Node.js) или аналог для вашего бэкенда. VAPID-ключи генерируются один раз, подписка хранится в базе данных.

На текущий момент iOS (начиная с версии 16.4) поддерживает Web Push только для установленных PWA, Chrome/Firefox/Edge — полная поддержка без установки. Частота и релевантность уведомлений напрямую влияют на отток подписчиков — A/B тестирование времени отправки и формулировок стандартная практика.

Почему стоит выбрать PWA вместо нативных приложений?

Экономия на разработке под две платформы — до 60% бюджета. Один код, единая бизнес-логика, автоматическое обновление без магазинов. Мы выполнили более 30 PWA-проектов для e-commerce, финтеха и корпоративных систем — гарантируем совместимость с последними версиями браузеров и отличные показатели Core Web Vitals (LCP, CLS, INP). PWA увеличивает конверсию в среднем на 36% (данные Google). Сертифицированные специалисты с опытом 7+ лет в веб-разработке.

Что входит в разработку PWA под ключ?

Этап Результат Срок
Аудит текущего приложения Отчёт PWA‑score, рекомендации 1–2 дня
Проектирование офлайн‑сценариев Документация, прототип 2–3 дня
Разработка Service Worker + манифест Код, автоматическое тестирование 5–10 дней
Интеграция Web Push (опционально) Бэкенд‑ендпоинт, подписка 3–5 дней
Тестирование на реальных устройствах Отчёт, правки 3–5 дней
Деплой и документация Доступы, инструкция, гарантия 1 месяц 1–2 дня

App Shell архитектура и precaching критических ресурсов при первой установке дают мгновенную загрузку оболочки приложения даже при медленном соединении.

Процесс работы и сроки

  1. Аудит текущего приложения (Lighthouse PWA score, анализ сценариев).
  2. Определение ценных офлайн-сценариев.
  3. Настройка Service Worker через Workbox и реализация манифеста.
  4. Интеграция Web Push (если требуется).
  5. Тестирование на реальных устройствах — Chrome DevTools, Safari Web Inspector.
  6. Деплой, документация, обучение команды.

Ориентировочные сроки: базовая PWA (манифест + Service Worker + кэш статики) — 1–2 недели поверх готового приложения; Web Push — 1–2 недели; офлайн-редактирование с IndexedDB и Background Sync — 3–6 недель в зависимости от сложности данных.

Стоимость рассчитывается индивидуально после аудита. PWA-проект обычно обходится в 2–3 раза дешевле нативного приложения под обе платформы. Дополнительную экономию даёт отсутствие затрат на публикацию в App Store и Google Play. Свяжитесь с нами для консультации — мы бесплатно оценим ваш проект и предложим оптимальную стратегию внедрения.

Ссылки для углублённого изучения