Notifications API и обработка разрешений
Запрашивайте разрешение на уведомления в подходящий момент и отправляйте уведомления браузера из React
«Notifications API и обработка разрешений» — бесплатный урок React Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.
Свойство Notification.permission
Notification.permission — это статическая строка, отражающая текущее состояние разрешения. Она может иметь значение "granted" (пользователь разрешил), "denied" (пользователь заблокировал) или "default" (запрос ещё не отправлялся). Проверяйте это свойство перед попыткой показать уведомления, чтобы избежать ненужных ошибок.
Запрос разрешения
Notification.requestPermission() возвращает Promise, который разрешается новой строкой разрешения. Вызывайте его только в ответ на явное действие пользователя, а не при загрузке страницы. Браузеры игнорируют или подавляют запросы разрешения, которые сразу появляются при загрузке, а пользователи считают их раздражающими, если они возникают без объяснения.
Рекомендация: запрашивайте разрешение после действия пользователя
Наиболее эффективный подход — показать внутри приложения сообщение с объяснением пользы функции, а затем предложить пользователю нажать «Включить уведомления» перед вызовом requestPermission(). Это даёт пользователю необходимый контекст, повышает вероятность согласия и не позволяет браузеру пометить сайт как источник нежелательных сообщений. Никогда не запрашивайте разрешение при загрузке страницы.
Создание уведомления
new Notification(title, options) создаёт и отображает системное уведомление. Первый аргумент — строка с заголовком. Объект options является вторым аргументом и принимает такие свойства, как body (текст подзаголовка), icon (URL изображения) и tag для устранения дубликатов. Это работает только при наличии разрешения "granted".
Параметры уведомлений
К основным параметрам уведомления относятся: body для описательного текста под заголовком, icon для небольшого изображения, badge для небольшого монохромного значка в области уведомлений OS, image для крупного встроенного изображения, tag для замены предыдущего уведомления с тем же тегом и requireInteraction: true, чтобы уведомление оставалось на экране, пока пользователь не выполнит действие.
События уведомлений
Экземпляр Notification вызывает несколько событий: onclick — при нажатии пользователя на уведомление (используйте его, чтобы активировать окно и выполнить переход), onclose — при закрытии уведомления и onerror — если при его создании возникла проблема. Добавляйте обработчики в возвращённый экземпляр после вызова new Notification().
Программное закрытие уведомлений
Сохраните возвращённый экземпляр Notification в переменной и вызовите notification.close(), чтобы программно закрыть уведомление. Это полезно для уведомлений, актуальных лишь ограниченное время. Объедините этот вызов с setTimeout, чтобы автоматически закрыть уведомление через несколько секунд.
Требование HTTPS для уведомлений
API уведомлений требует защищённого контекста. На страницах HTTP значение typeof Notification === 'undefined' или API полностью отключено — в зависимости от браузера. Это мера безопасности, предотвращающая заполнение устройств пользователей поддельными системными сообщениями со стороны вредоносных сайтов. Перед использованием всегда проверяйте доступность API.
Создание хука useNotifications
Хук useNotifications может предоставлять два метода: requestPermission() и showNotification(title, options). Он самостоятельно отслеживает текущее состояние разрешения и обновляет его после запроса. Компоненты вызывают showNotification, не заботясь о проверке разрешения, поскольку хук выполняет её внутри себя.
Объединение с API видимости страницы
API видимости страницы предоставляет document.hidden и событие visibilitychange. Уведомления наиболее уместны, когда пользователь не просматривает вкладку. Проверяйте document.hidden === true перед показом уведомления, чтобы не создавать лишние оповещения, когда страница уже находится на переднем плане.
Сервис-воркеры и push-уведомления
Показанный здесь API уведомлений предназначен для локальных уведомлений, инициируемых самой страницей. Для push-уведомлений, которые приходят даже при закрытой странице, необходимы Push API и сервис-воркер. Сервис-воркер получает событие push и в фоновом режиме вызывает self.registration.showNotification().
Значения Notification.permission
Какое из следующих значений NOT является допустимым для Notification.permission?
Итоги урока: API уведомлений
Notification.permission может иметь значение granted, denied или default. Всегда запрашивайте разрешение после действия пользователя, а не при загрузке страницы. Используйте new Notification(title, options) для создания уведомлений и обрабатывайте onclick, чтобы активировать окно. Объединяйте это с API видимости страницы, чтобы показывать уведомления только при скрытой вкладке.
Часто задаваемые вопросы
Урок «Notifications API и обработка разрешений» бесплатный?
Да — полный текст урока «Notifications API и обработка разрешений» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.
Чему я научусь в уроке «Notifications API и обработка разрешений»?
Запрашивайте разрешение на уведомления в подходящий момент и отправляйте уведомления браузера из React Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать React Academy?
Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Notifications API и обработка разрешений»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке React Academy?
Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Clipboard API: копирование и вставка в React
- Geolocation API в компонентах React
- Notifications API и обработка разрешений
- IntersectionObserver для эффектов при прокрутке