Задача: Настроить Web Push-уведомления для запросов помощи

Настроить Web Push-уведомления для запросов помощи

Добавить стандартный Web Push с VAPID, чтобы пользователи со статусом «Я на связи» получали уведомления о новых запросах даже при погашенной вкладке.

Цель

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

Использовать стандартный Web Push API + Service Worker + VAPID, без привязки бизнес-логики к Firebase или отдельной APNs-интеграции.

Архитектура

Клиент:

  • запрос разрешения на уведомления;
  • регистрация Service Worker;
  • PushManager.subscribe() с публичным VAPID-ключом;
  • отправка PushSubscription на backend;
  • обработка события push в Service Worker;
  • показ системного уведомления;
  • обработка клика по уведомлению и открытие нужного экрана/запроса.

Backend:

  • генерация и хранение VAPID key pair;
  • хранение push subscriptions пользователей;
  • отправка Web Push на opaque endpoint, выданный браузером;
  • шифрование payload ключами подписки;
  • VAPID-подпись запросов;
  • удаление протухших подписок при ответах 404/410;
  • логирование доставки и ошибок.

Интеграция с presence

Push должен отправляться только тем пользователям, у которых активен статус «Я на связи».

Статус должен иметь TTL, чтобы пользователь не получал уведомления спустя долгое время после того, как фактически перестал быть доступен.

Realtime при активной вкладке и Web Push при фоновой/закрытой вкладке должны использовать одно событие help_requested, но разные каналы доставки.

Сценарий

  1. Пользователь включает «Я на связи».
  2. Если push-разрешение ещё не выдано — предлагается включить уведомления.
  3. Браузер создаёт подписку и передаёт её backend.
  4. Появляется новый запрос помощи.
  5. Активной вкладке событие приходит через realtime-канал.
  6. Неактивной/выгруженной вкладке событие приходит через Web Push.
  7. По нажатию на уведомление открывается конкретный запрос помощи.

Особенности iOS

Проверить и учесть текущие ограничения Web Push на iPhone/iPad:

  • Web Push работает для web app, добавленного на Home Screen;
  • разрешение должно запрашиваться после явного действия пользователя;
  • доставка идёт через инфраструктуру Apple, но отдельный Apple Developer account и ручная APNs-интеграция для стандартного Web Push не требуются.

Что проверить

  • Chrome desktop;
  • Firefox desktop;
  • Safari macOS;
  • Android Chrome;
  • iPhone/iPad Home Screen web app;
  • повторную подписку после сброса разрешений;
  • обновление Service Worker;
  • несколько устройств одного пользователя;
  • удаление невалидных subscriptions;
  • переход по уведомлению в уже открытую вкладку и в новую вкладку.

Принцип

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