API триггеров уведомлений

Notification Triggers позволяет планировать локальные уведомления, не требующие подключения к сети, что делает их идеальными для использования, например, в приложениях-календарях.

Что такое триггеры уведомлений?

Веб-разработчики могут отображать уведомления с помощью API веб-уведомлений . Эта функция часто используется совместно с API Push для информирования пользователя о важных событиях, таких как срочные новости или полученные сообщения. Уведомления отображаются с помощью JavaScript-кода на устройстве пользователя.

Проблема Push API заключается в том, что он ненадёжен для запуска уведомлений, которые должны отображаться при выполнении определённого условия, например, времени или местоположения. Примером условия, привязанного ко времени, является уведомление в календаре, напоминающее о важной встрече с руководителем в 14:00. Примером условия, привязанного к местоположению, является уведомление о необходимости купить молоко, когда вы приближаетесь к продуктовому магазину. Проблемы с подключением к сети или функции экономии заряда батареи, такие как режим ожидания, могут задерживать доставку push-уведомлений.

Триггеры уведомлений решают эту проблему, позволяя заранее планировать уведомления с указанием условий их срабатывания, чтобы операционная система доставляла уведомления в нужное время, даже если отсутствует подключение к сети или устройство находится в режиме экономии заряда батареи.

Варианты использования

Приложения-календари могут использовать уведомления, привязанные к времени, чтобы напоминать пользователю о предстоящих встречах. Схема уведомлений по умолчанию для приложения-календаря может включать показ первого предупреждающего уведомления за час до встречи, а затем ещё одного, более срочного, уведомления за пять минут.

Телевизионная сеть может напомнить пользователям о том, что вот-вот начнется их любимое телешоу или прямая трансляция конференции.

Сайты преобразования часовых поясов могут использовать основанные на времени триггеры уведомлений, чтобы позволить своим пользователям планировать будильники для телефонных конференций или видеозвонков.

Текущий статус

Шаг Статус
1. Создайте пояснитель Полный
2. Создайте первоначальный проект спецификации Не начато
3. Собирайте отзывы и совершенствуйте дизайн. В ходе выполнения
4. Испытание происхождения Полный
5. Запуск Не начато

Как использовать триггеры уведомлений

Включение через about://flags

Чтобы поэкспериментировать с API триггеров уведомлений локально, без пробного токена источника, включите флаг #enable-experimental-web-platform-features в about://flags .

Обнаружение особенностей

Узнать, поддерживает ли браузер триггеры уведомлений, можно, проверив наличие свойства showTrigger :

if ('showTrigger' in Notification.prototype) {
  /* Notification Triggers supported */
}

Планирование уведомления

Планирование уведомления похоже на показ обычного push-уведомления, за исключением того, что вам необходимо передать свойство условия showTrigger с объектом TimestampTrigger в качестве значения объекту options уведомления.

const createScheduledNotification = async (tag, title, timestamp) => {
  const registration = await navigator.serviceWorker.getRegistration();
  registration.showNotification(title, {
    tag: tag,
    body: 'This notification was scheduled 30 seconds ago',
    showTrigger: new TimestampTrigger(timestamp + 30 * 1000),
  });
};

Отмена запланированного уведомления

Чтобы отменить запланированные уведомления, сначала запросите список всех уведомлений, соответствующих определённому тегу, через ServiceWorkerRegistration.getNotifications() . Обратите внимание, что для включения запланированных уведомлений в список необходимо передать флаг includeTriggered :

const cancelScheduledNotification = async (tag) => {
  const registration = await navigator.serviceWorker.getRegistration();
  const notifications = await registration.getNotifications({
    tag: tag,
    includeTriggered: true,
  });
  notifications.forEach((notification) => notification.close());
};

Отладка

Для отладки уведомлений можно использовать панель уведомлений в Chrome DevTools . Чтобы начать отладку, нажмите «Начать запись событий». Начать запись событий или Control + E ( Command + E на Mac). Chrome DevTools записывает все события уведомлений, включая запланированные, отображаемые и закрытые уведомления, в течение трёх дней, даже когда DevTools закрыт.

Запланированное событие уведомления было зарегистрировано на панели уведомлений Chrome DevTools, которая находится на панели приложений.
Запланированное уведомление.
Событие отображения уведомления было зарегистрировано на панели уведомлений Chrome DevTools.
Отображаемое уведомление.

Демо

Вы могли увидеть триггеры уведомлений в действии в демонстрации, которая позволяла вам планировать уведомления, составлять список запланированных уведомлений и отменять их.

Скриншот демонстрационного веб-приложения Notification Triggers.
Демонстрация триггеров уведомлений.

Безопасность и разрешения

Команда Chrome разработала и реализовала API триггеров уведомлений, используя основные принципы, изложенные в документе «Управление доступом к мощным функциям веб-платформы» , включая пользовательский контроль, прозрачность и эргономичность. Поскольку для этого API требуются сервис-воркеры, ему также необходим безопасный контекст. Для использования API требуется то же разрешение, что и для обычных push-уведомлений.

Пользовательский контроль

Этот API доступен только в контексте ServiceWorkerRegistration . Это означает, что все необходимые данные хранятся в том же контексте и автоматически удаляются при удалении сервис-воркера или удалении пользователем всех данных сайта-источника. Блокировка файлов cookie также предотвращает установку сервис-воркеров в Chrome и, следовательно, использование этого API. Пользователь всегда может отключить уведомления для сайта в настройках сайта.

Прозрачность

В отличие от Push API, этот API не зависит от сети, что подразумевает, что для запланированных уведомлений необходимо заранее предоставить все необходимые данные, включая ресурсы изображений, на которые ссылаются атрибуты badge , icon и image . Это означает, что показ запланированного уведомления не виден разработчику и не требует пробуждения сервисного работника до тех пор, пока пользователь не взаимодействует с уведомлением. Следовательно, в настоящее время не существует известного способа, которым разработчик мог бы получить информацию о пользователе с помощью потенциально нарушающих конфиденциальность подходов, таких как поиск по геолокации IP-адреса. Такая конструкция также позволяет функции опционально использовать механизмы планирования, предоставляемые операционной системой, такие как AlarmManager в Android, что помогает экономить заряд батареи.

Обратная связь

Команда Chrome хочет узнать о вашем опыте работы с триггерами уведомлений.

Расскажите нам о дизайне API

Есть ли что-то в API, что работает не так, как вы ожидали? Или отсутствуют методы или свойства, необходимые для реализации вашей идеи? Есть вопросы или комментарии по модели безопасности? Отправьте запрос на спецификацию в репозиторий Notification Triggers на GitHub или добавьте свои замечания к существующему запросу.

Проблема с реализацией?

Вы обнаружили ошибку в реализации Chrome? Или реализация отличается от спецификации? Сообщите об ошибке на сайте new.crbug.com . Опишите проблему максимально подробно, предоставьте простые инструкции по её воспроизведению и выберите в качестве компонентов пункт UI>Notifications .

Планируете использовать API?

Планируете использовать триггеры уведомлений на своём сайте? Ваша публичная поддержка помогает нам расставлять приоритеты в отношении функций и показывает другим разработчикам браузеров, насколько важна их поддержка. Отправьте твит @ChromiumDev с хэштегом #NotificationTriggers и расскажите нам, где и как вы их используете.

Полезные ссылки

Благодарности

Триггеры уведомлений были реализованы Ричардом Ноллом , а пояснительная статья написана Питером Беверлоо при участии Ричарда. Статью рецензировали Джо Медли , Пит ЛеПейдж , а также Ричард и Питер. Изображение главного героя предоставлено Лукасом Блазеком на Unsplash.