Service worker и доставка пушей
Service worker — фоновый скрипт PWA, который отвечает за доставку пушей даже тогда, когда вкладка с приложением закрыта. Без зарегистрированного service worker подписка на пуши и их показ в браузере технически невозможны. Разбираем, как устроена доставка на уровне браузера и что из этого APEX настраивает за байера.
Что такое service worker и какую роль он играет в PWA
Service worker — это JS-скрипт, который браузер запускает в отдельном потоке, без доступа к DOM страницы и без привязки к открытой вкладке. Он живёт по своему циклу: устанавливается, активируется и дальше работает в фоне, обслуживая офлайн-кэш, фоновую синхронизацию и, самое важное для арбитража, push-уведомления. Именно зарегистрированный service worker отличает полноценную PWA от обычного лендинга — без него собрать пуш-базу невозможно в принципе.
Как технически происходит доставка пуша
Пользователь даёт разрешение на уведомления, и браузер через PushManager создаёт подписку — уникальный endpoint у push-сервиса браузера. Ваш сервер отправляет payload на этот endpoint, push-сервис доставляет его на устройство и «пробуждает» service worker событием push. Внутри этого события SW вызывает showNotification — и только тогда пользователь видит уведомление на экране.
Обязательные условия, без которых пуши не заработают
PWA должна отдаваться по HTTPS — без валидного сертификата браузер не даст зарегистрировать service worker. Scope worker'а должен покрывать страницы, с которых собирается подписка, а сам SW должен успеть зарегистрироваться до попытки подписки. Разрешение на уведомления даёт только сам пользователь через нативный prompt браузера — обойти этот шаг нельзя, можно лишь грамотно подвести к нему через преленд.
Что из этого настраивает APEX
APEX разворачивает и обслуживает service worker и всю инфраструктуру подписки сам — байеру не нужно писать JS или разбираться в PushManager. Дальше работает пуш-движок: сбор базы подписчиков, сегментация по гео и поведению, триггерные цепочки и рассылки по расписанию — всё, что происходит после успешной подписки, уже готово из коробки. Свой домен с автоматическим HTTPS и ротацией в один клик снимает и вопрос сертификатов при смене домена.
Типичные проблемы с доставкой и куда смотреть
Если пуши не доходят, первым делом проверяют, не завис ли у пользователя старый service worker — браузер может использовать прежнюю версию, пока не закрыты все вкладки сайта. Второй частый случай — пользователь один раз отклонил разрешение на уведомления, и повторно нативный prompt браузер уже не покажет. На iOS веб-пуши работают только начиная с iOS 16.4 и только для PWA, добавленной на экран «Домой» — обычная вкладка Safari пуши не получает. Для диагностики удобна вкладка Application → Service Workers в devtools: там видны статус регистрации и ошибки.
Частые вопросы
- Будут ли приходить пуши, если пользователь закрыл вкладку с PWA?
- Да, в этом и смысл service worker — он работает в фоне независимо от открытой вкладки, пока жив процесс браузера и включены уведомления на уровне ОС.
- Почему часть базы не получает пуш после обновления сценария рассылки?
- Скорее всего у этих пользователей ещё активна старая версия service worker — браузер переключается на новую только после закрытия всех вкладок сайта или явного skipWaiting.
- Работают ли web-пуши на iPhone?
- Да, но только начиная с iOS 16.4 и только если PWA установлена через «Добавить на экран Домой» — в обычной вкладке Safari Push API недоступен.
- Нужно ли байеру самому писать код service worker в APEX?
- Нет, APEX регистрирует и обслуживает service worker автоматически — вам остаётся настроить сегменты и сценарии рассылки в пуш-движке.
Клоака, антибот, пуши, сплит-тесты и свои домены — в одном сервисе.
Начать бесплатно