Зачем использовать push-уведомления?
Уведомления предоставляют пользователю небольшие фрагменты информации. Веб-приложения могут использовать уведомления, чтобы сообщать пользователям о важных, требующих оперативного реагирования событиях или действиях, которые необходимо выполнить.
Внешний вид уведомлений различается на разных платформах. Например:


Традиционно веб-браузеры инициировали обмен информацией между сервером и клиентом, отправляя запрос. Технология веб-push , с другой стороны, позволяет настроить сервер на отправку уведомлений тогда, когда это необходимо для вашего приложения. Сервис push-уведомлений создает уникальные URL-адреса для каждого подписанного сервис-воркера. Отправка сообщений на URL-адрес сервис-воркера вызывает события на этом сервис-воркере, побуждая его отобразить уведомление.
Push-уведомления могут помочь пользователям максимально эффективно использовать ваше приложение, предлагая им повторно открыть его и использовать, основываясь на самой актуальной информации.
Создание и отправка уведомлений
Создавайте уведомления с помощью API уведомлений . Объект Notification содержит строковый title и объект options . Например:
let title = 'Hi!';
let options = {
body: 'Very Important Message',
/* other options can go here */
};
let notification = new Notification(title, options);
Когда уведомление активно, title отображается жирным шрифтом, а в body уведомления содержится дополнительный текст.
Получите разрешение на отправку уведомлений.
Для отображения уведомления ваше приложение должно получить разрешение от пользователя:
Notification.requestPermission();
Как работают push-уведомления?
Реальная сила уведомлений заключается в сочетании сервисных работников и технологии push-уведомлений:
Сервис-воркеры могут работать в фоновом режиме и отображать уведомления, даже когда ваше приложение не отображается на экране.
Технология push-уведомлений позволяет настроить сервер на отправку уведомлений в подходящее для вашего приложения время. Сервис push-уведомлений создает уникальные URL-адреса для каждого подписанного сервис-воркера. Отправка сообщений на URL-адрес сервис-воркера генерирует события на этом сервис-воркере, побуждая его отобразить уведомление.
В приведенном ниже примере клиент регистрирует сервис-воркер и подписывается на push-уведомления. Затем сервер отправляет уведомление на конечную точку подписки.
Клиент и сервис-воркер используют чистый JavaScript без дополнительных библиотек. Сервер построен на Node.js с использованием пакета express npm и использует пакет web-push npm для отправки уведомлений. Для отправки информации на сервер клиент отправляет POST-запрос на URL-адрес, предоставленный сервером.
Часть 1: Зарегистрируйте сервис-пользователя и подпишитесь на Push-уведомления.
Клиентское приложение регистрирует сервис-воркер с помощью
ServiceWorkerContainer.register(). Зарегистрированный сервис-воркер будет продолжать работать в фоновом режиме, когда клиентское приложение неактивно.Код клиента:
navigator.serviceWorker.register('sw.js');Клиент запрашивает у пользователя разрешение на отправку уведомлений.
Код клиента:
Notification.requestPermission();Для включения push-уведомлений сервис-воркер использует
PushManager.subscribe()для создания подписки на push-уведомления. В вызовеPushManager.subscribe()сервис-воркер предоставляет ключ API приложения в качестве идентификатора.Код клиента:
navigator.serviceWorker.register('sw.js').then(sw => { sw.pushManager.subscribe({ /* API key */ }); });Сервисы push-уведомлений, такие как Firebase Cloud Messaging, работают по модели подписки. Когда сервис-воркер подписывается на сервис push-уведомлений, вызывая метод
PushManager.subscribe(), сервис создает уникальный для этого сервис-воркера URL-адрес. Этот URL-адрес называется конечной точкой подписки .Клиент отправляет конечную точку подписки на сервер приложений.
Код клиента:
navigator.serviceWorker.register('sw.js').then(sw => { sw.pushManager.subscribe({ /* API key */ }).then(subscription => { sendToServer(subscription, '/new-subscription', 'POST'); }); });Код сервера:
app.post('/new-subscription', (request, response) => { // extract subscription from request // send 'OK' response });
Часть 2: Отправка уведомления
Веб-сервер отправляет уведомление на конечную точку подписки.
Код сервера:
const webpush = require('web-push'); let options = { /* config info for cloud messaging and API key */ }; let subscription = { /* subscription created in Part 1*/ }; let payload = { /* notification */ }; webpush.sendNotification(subscription, payload, options);Уведомления, отправленные на конечную точку подписки, генерируют события push, целевым объектом которых является сервис-воркер. Сервис-воркер получает сообщение и отображает его пользователю в виде уведомления.
Код сервис-воркера:
self.addEventListener('push', (event) => { let title = { /* get notification title from event data */ } let options = { /* get notification options from event data */ } showNotification(title, options); })Пользователь взаимодействует с уведомлением, активируя веб-приложение, если оно еще не было активировано.
Следующие шаги
В качестве следующего шага внедрите push-уведомления!
Мы разработали серию практических заданий, которые помогут вам пройти каждый этап процесса.