Задача: Настроить 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, но разные каналы доставки.
Сценарий
- Пользователь включает «Я на связи».
- Если push-разрешение ещё не выдано — предлагается включить уведомления.
- Браузер создаёт подписку и передаёт её backend.
- Появляется новый запрос помощи.
- Активной вкладке событие приходит через realtime-канал.
- Неактивной/выгруженной вкладке событие приходит через Web Push.
- По нажатию на уведомление открывается конкретный запрос помощи.
Особенности 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.