Открыть сервис

Web Push API

Web Push API — это программный интерфейс (API) веб-браузеров, предоставляющий веб-приложениям возможность отправлять push-уведомления пользователям, даже когда само приложение не открыто в браузере. Механизм позволяет доставлять короткие сообщения с информацией, призывающей пользователя вернуться на сайт или выполнить определённое действие. Web Push API является частью более широкой технологии Service Workers и стандартизирован Консорциумом Всемирной паутины (W3C).

История и предпосылки создания

До появления Web Push API веб-сайты могли уведомлять пользователей только в момент их нахождения на странице — через всплывающие окна или встроенные элементы интерфейса. С развитием прогрессивных веб-приложений (PWA) возникла потребность в механизме, аналогичном нативным push-уведомлениям мобильных операционных систем (iOS, Android). Первые черновики спецификации Web Push API были опубликованы W3C в 2012 году. Активное внедрение началось с 2015–2016 годов, когда поддержка появилась в браузерах Google Chrome, Mozilla Firefox и Opera. В 2020 году Web Push API стал рекомендованным стандартом W3C.

Архитектура и принцип работы

Web Push API функционирует на основе трёх ключевых компонентов: веб-приложения (клиента), сервера приложений и push-сервиса браузера.

Service Worker

Центральным элементом является Service Worker — скрипт, который браузер запускает в фоновом режиме, отдельно от веб-страницы. Service Worker регистрируется для конкретного домена и может обрабатывать события, такие как получение push-сообщения, даже когда вкладка с сайтом закрыта.

Push-сервис

Каждый браузер, поддерживающий Web Push API, использует собственный push-сервис (например, Firebase Cloud Messaging для Chrome, Mozilla Autopush для Firefox). Push-сервис выступает посредником между сервером приложений и браузером пользователя. Он принимает сообщения от сервера и доставляет их на устройство, даже если браузер не запущен.

Процесс подписки и доставки

  1. Регистрация Service Worker: Веб-приложение регистрирует Service Worker в браузере пользователя.
  2. Подписка на уведомления: Приложение через API PushManager.subscribe() запрашивает у браузера разрешение на получение push-уведомлений. Пользователь должен явно согласиться. В ответ браузер генерирует объект PushSubscription, который содержит:
  • endpoint — уникальный URL push-сервиса, на который сервер приложений будет отправлять сообщения.
  • keys — публичный ключ для шифрования (по стандарту VAPID).
  1. Передача подписки на сервер: Объект PushSubscription (обычно в формате JSON) отправляется на сервер приложений и сохраняется в базе данных для последующей рассылки.
  2. Отправка push-сообщения: Сервер приложений формирует HTTP-запрос (POST) к endpoint, указанному в подписке. Запрос содержит зашифрованное тело сообщения и заголовки, необходимые для аутентификации (VAPID).
  3. Доставка через push-сервис: Push-сервис получает запрос, проверяет его валидность и отправляет сообщение на устройство пользователя через собственный протокол (например, WebSocket).
  4. Обработка в браузере: Браузер получает сообщение и пробуждает Service Worker. Service Worker обрабатывает событие push, извлекает данные и отображает уведомление с помощью API Notification (или выполняет другие фоновые действия, например, обновление кэша).

Протокол VAPID

VAPID (Voluntary Application Server Identification) — это протокол аутентификации, ставший обязательным для большинства push-сервисов. Он позволяет серверу приложений идентифицировать себя перед push-сервисом, используя пару ключей (публичный и приватный). Публичный ключ передаётся браузеру при подписке, а приватный хранится на сервере. При отправке сообщения сервер подписывает запрос приватным ключом, что гарантирует, что сообщение отправлено именно тем сервером, который зарегистрировал подписку. VAPID решает проблему анонимных рассылок и спама.

Безопасность и шифрование

Все push-сообщения, отправляемые через Web Push API, должны быть зашифрованы по стандарту AES-GCM (Advanced Encryption Standard in Galois/Counter Mode). Это требование спецификации: сервер приложений шифрует тело сообщения публичным ключом, полученным от браузера при подписке. Расшифровать сообщение может только браузер, обладающий соответствующим приватным ключом. Таким образом, даже push-сервис не имеет доступа к содержимому уведомления.

Поддержка браузерами

По состоянию на 2024 год Web Push API поддерживается всеми основными браузерами на десктопных и мобильных платформах, за исключением Safari (на iOS) и некоторых старых версий. В Safari на macOS поддержка появилась в версии 16.1 (2022 год), но на iOS она остаётся ограниченной и требует, чтобы сайт был добавлен на экран «Домой» как PWA. В браузерах на базе Chromium (Chrome, Edge, Opera, Яндекс.Браузер) и Firefox реализация наиболее полная.

Применение

Web Push API широко используется в следующих сценариях:

  • Уведомления о новых сообщениях: в мессенджерах, социальных сетях, email-клиентах.
  • Оповещения о событиях: новости, скидки, статусы заказов, напоминания.
  • Обновление контента: в новостных агрегаторах, блогах, торговых площадках.
  • Фоновые задачи: синхронизация данных, обновление кэша, запуск ограниченных фоновых операций (например, загрузка файлов).

Ограничения и критика

Несмотря на широкие возможности, Web Push API имеет ряд недостатков:

  • Зависимость от браузера: Уведомления работают только в том браузере, где была произведена подписка. Если пользователь перешёл на другой браузер, подписка теряется.
  • Ограничения iOS: На устройствах Apple (iPhone, iPad) поддержка Web Push API в браузерах сторонних разработчиков (Chrome, Firefox) отсутствует из-за ограничений платформы WebKit. Уведомления доступны только через Safari при условии, что сайт добавлен на главный экран.
  • Злоупотребления: Некоторые сайты используют агрессивные запросы на подписку, что приводит к «усталости от уведомлений» и их массовому блокированию пользователями. Браузеры (например, Chrome) ввели функцию «тихих уведомлений», автоматически отклоняющих назойливые запросы.
  • Сложность отладки: Разработка и отладка push-уведомлений требует настройки серверной части, работы с ключами шифрования и тестирования в различных браузерных средах.
  • Отсутствие гарантии доставки: Push-сервисы не гарантируют немедленную доставку сообщения, особенно если устройство находится в автономном режиме. Сообщение может быть доставлено с задержкой или не доставлено вовсе (хотя обычно сервисы хранят его до 4 недель).

Источники

  1. W3C Recommendation: Push API (https://www.w3.org/TR/push-api/)
  2. MDN Web Docs: Web Push API (https://developer.mozilla.org/en-US/docs/Web/API/Push_API)
  3. Google Developers: Web Push Notifications (https://developers.google.com/web/fundamentals/push-notifications)
  4. Mozilla Developer Network: Service Worker API (https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API)
  5. RFC 8292: Voluntary Application Server Identification (VAPID) for Web Push (https://datatracker.ietf.org/doc/html/rfc8292)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →