К содержимому
PWA·гид
  1. Главная
  2. Pushi
  3. Как работают веб-пуши

Как работают веб-пуши: подписка и доставка

Проверено: 30.10.2026

Коротко

Разбираем, как работают пуши в PWA и web push: разрешение, подписка, сервер и сервис-воркер. Когда просить доступ и почему пуши не доходят.

Веб-пуш работает как цепочка из четырёх звеньев: браузер запрашивает у пользователя разрешение, создаёт подписку, наш сервер отправляет сообщение через push-сервис браузера, а сервис-воркер принимает его и показывает уведомление. Если порвалось любое звено, пуш не дойдёт, поэтому диагностику ведём по цепочке, от разрешения к показу.

Как работают пуши в PWA: цепочка целиком

  1. Разрешение. Страница просит у пользователя право показывать уведомления.
  2. Подписка. Браузер регистрирует устройство в push-сервисе и отдаёт нам объект подписки.
  3. Сервер. Мы сохраняем подписку и отправляем сообщение на адрес из неё.
  4. Сервис-воркер. Он получает событие и показывает уведомление.

Формат и настройка описаны в общем гайде по web push уведомлениям, платформенные особенности Android — в разборе пушей из PWA на Android.

Шаг 1. Запрос разрешения на уведомления

Разрешение имеет три состояния: «не спрашивали», «разрешено» и «запрещено». Пока пользователь не ответил, можно показать системный запрос. После отказа состояние «запрещено» из кода не отменить: повторный вызов ничего не покажет. Вернуть пуши может только сам пользователь через настройки сайта или приложения.

Поэтому системный запрос — по сути одна попытка, и тратить её нужно осознанно.

Шаг 2. Подписка: что создаёт браузер

После согласия страница через сервис-воркер оформляет подписку. Результат — объект, в котором есть:

  • адрес конечной точки (endpoint) в push-сервисе конкретного браузера;
  • ключи шифрования, которыми защищается содержимое сообщения.

Также нужен публичный ключ нашего сервера (VAPID): по нему push-сервис понимает, что сообщения шлёт именно тот сервер, для которого оформлена подписка. Объект подписки отправляем на бэкенд и храним в связке с пользователем.

Шаг 3. Сервер отправляет, push-сервис доставляет

Сервер не обращается к браузеру напрямую. Он делает запрос на endpoint из подписки, подписывает его приватным VAPID-ключом и шифрует данные. Push-сервис принимает сообщение и держит его, пока устройство не появится в сети, в пределах заданного нами времени жизни.

Шаг 4. Сервис-воркер показывает уведомление

Воркер получает событие push и вызывает показ уведомления. Он работает отдельно от страницы, поэтому уведомление приходит и при закрытой вкладке. Клик обрабатываем событием notificationclick: открываем нужный экран или фокусируем уже открытое окно. Регистрация и обновление воркера описаны в материале про манифест и сервис-воркер.

Когда просить разрешение на уведомления

Правило: сначала ценность, потом запрос. Системный запрос на первом экране почти всегда преждевременен: пользователь ещё не понял, зачем ему пуши.

Мягкое предварительное окно. Перед системным запросом показываем свой экран с объяснением, что именно придёт. Если пользователь отказывается там, системная попытка остаётся нетронутой.

После отказа. Не давим повторами. Достаточно подсказки в интерфейсе, как включить уведомления в настройках.

Момент запросаРискВердикт
Сразу при загрузкеВысокий шанс отказа, попытка сгораетНе делаем
После установки PWAПользователь уже проявил интересНормально, с предварительным окном
После целевого действия (например, подписка на статус заказа)Польза очевиднаЛучший вариант
Повтор после отказаРаздражение, жалобыТолько мягкая подсказка

На iPhone пуши работают только из PWA, установленной на экран «Домой», поэтому запрос привязываем к установке. Подробности — в гайде по PWA на iPhone.

Почему пуши не доходят

Диагностика по схеме «симптом → причина → что делать».

Подписка

  • Симптом: push-сервис отвечает, что подписка не найдена или удалена. Причина: она просрочена или отозвана. Что делать: удалять такие записи и не слать на них повторно.
  • Симптом: пользователь сменил браузер или переустановил PWA. Причина: подписка привязана к прежней установке. Что делать: оформить новую при следующем визите.

Сервер

  • Неверная пара VAPID-ключей: публичный ключ при подписке и приватный при отправке должны совпадать.
  • Ошибки шифрования или неверный формат данных: push-сервис отклоняет запрос.
  • Слишком короткое время жизни сообщения: если устройство было офлайн, оно истекает.

Устройство и браузер

  • Экономия заряда и фоновые ограничения могут задерживать доставку.
  • Режим «не беспокоить» скрывает доставленное уведомление.
  • На iOS пуши работают только в установленной PWA.
  • В отдельных оболочках и встроенных браузерах поддержка может отсутствовать, подробнее в разделе про webview.

Сервис-воркер

  • Воркер не зарегистрирован или остался старой версии.
  • Обработчик push не вызывает показ уведомления, и браузер может показать служебное сообщение или скрыть его.
  • Ошибка в обработчике обрывает показ без видимых следов.

Пошаговая проверка — в диагностике, когда пуши из PWA не приходят.

Как проверить, что цепочка работает

  1. Проверяем состояние разрешения в настройках сайта.
  2. Убеждаемся, что воркер зарегистрирован и активен (вкладка приложения в инструментах разработчика).
  3. Проверяем, что подписка сохранена на сервере и endpoint не пустой.
  4. Отправляем тестовое сообщение себе и смотрим код ответа push-сервиса.
  5. Вызываем событие push вручную в инструментах разработчика, чтобы отделить проблему показа от проблемы доставки.

Частые ошибки

  • Запрос разрешения на первом экране без объяснения.
  • Хранение подписок без чистки: база растёт, доставляемость падает.
  • Тест только на одном браузере и одной платформе.
  • Забытое обновление воркера после правок кода.
  • Отправка без времени жизни сообщения и без обработки ответов сервиса.

Вопрос–ответ

Можно ли повторно показать системный запрос после отказа? Нет. Состояние «запрещено» из кода не сбросить. Остаётся подсказка, как включить уведомления в настройках.

Нужен ли сервис-воркер для пушей? Да. Он принимает событие push и показывает уведомление, в том числе при закрытой вкладке.

Работают ли пуши на iPhone? Да, но только из PWA, установленной на экран «Домой». Установка описана в материале про PWA на iPhone.

Зачем нужны VAPID-ключи? Они подтверждают, что сообщения отправляет тот сервер, для которого оформлена подписка. Без них push-сервис может отклонять запросы.

Почему тестовый пуш пришёл, а боевой нет? Чаще всего дело в просроченной подписке, неверном формате данных или коротком времени жизни сообщения. Начинаем с кода ответа push-сервиса.

Где почитать про PWA в целом? В разделе Pwa собраны базовые материалы, включая объяснение, что такое PWA простыми словами.

Проверено: 30.10.2026. Правила сторов и возможности платформ описаны на дату проверки; точные формулировки смотрите в официальной справке Apple, Google и MDN. Нашли неточность — напишите на redakciya@pwa-arbitrazh.com.

В этом разделе Pushi

  • Что писать в пушах и что ломает доставку

    Что писать в пушах и что ломает доставку: структура текста, частота без «лучших цифр», запреты, сегменты и…

  • Пуши из PWA на iPhone

    Разбираем, как работают пуши PWA на iOS: установка на экран «Домой», версия iOS по справке Apple, отличия от…

  • Пуши из PWA на Android

    Пуши из PWA на Android — это системные уведомления, которые приходят из прогрессивного веб-приложения прямо в…