Что нужно реализовать в веб-приложении для отправки push-уведомлений на телефон?

«Что нужно реализовать в веб-приложении для отправки push-уведомлений на телефон?» — вопрос из категории Мобильное тестирование, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для отправки push-уведомлений с веб-сайта на мобильное устройство требуется реализация нескольких ключевых компонентов на стороне клиента (браузера) и сервера.

Клиентская часть (Frontend)

  1. Service Worker (SW): Фоновый скрипт, который принимает и обрабатывает push-сообщения, даже когда сайт закрыт.
  2. Push API: Используется для подписки пользователя на уведомления. Требует VAPID-ключей для аутентификации сервера.
  3. Notification API: Отвечает за отображение самого уведомления на экране устройства.

Пример кода подписки в браузере:

// 1. Регистрируем Service Worker
async function subscribeToPush() {
  const registration = await navigator.serviceWorker.register('/sw.js');

  // 2. Подписываемся на push-уведомления
  const subscription = await registration.pushManager.subscribe({
    userVisibleOnly: true, // Все уведомления должны показываться пользователю
    applicationServerKey: urlBase64ToUint8Array('YOUR_PUBLIC_VAPID_KEY_HERE')
  });

  // 3. Отправляем объект подписки на наш сервер для сохранения
  await fetch('/api/subscribe', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(subscription)
  });
  console.log('Подписка успешно оформлена и отправлена на сервер.');
}

Серверная часть (Backend)

  • Хранение подписок: Необходима БД для сохранения subscription объектов от каждого пользователя.
  • Отправка уведомлений: Использование библиотек (например, web-push для Node.js) для рассылки сообщений по Web Push Protocol. Для этого нужен приватный VAPID-ключ.

Обязательное требование: Протокол HTTPS (за исключением localhost), требуемый для работы Service Worker и Push API.