Опубликовано: 24 октября 2019 г.
Что такое триггеры уведомлений?
Веб-разработчики могут отображать уведомления с помощью API веб-уведомлений . Эта функция часто используется с API push-уведомлений для информирования пользователя о важной информации, например, о последних новостях или полученных сообщениях. Уведомления отображаются путем выполнения JavaScript на устройстве пользователя.
Проблема с Push API заключается в том, что он ненадежен для запуска уведомлений, которые должны отображаться при выполнении определенного условия, например, времени или местоположения. Примером условия, основанного на времени, может служить уведомление календаря, напоминающее о важной встрече с начальником в 14:00. Примером условия, основанного на местоположении, может служить уведомление, напоминающее о необходимости купить молоко, когда вы находитесь рядом с продуктовым магазином. Проблемы с сетевым подключением или функциями экономии заряда батареи, такими как режим сна, могут задерживать доставку push-уведомлений.
Функция запуска уведомлений решает эту проблему, позволяя заранее планировать уведомления с указанием условий их срабатывания, чтобы операционная система доставляла уведомление в нужное время, даже если нет подключения к сети или устройство находится в режиме энергосбережения.
Варианты использования
Календарные приложения могут использовать уведомления, привязанные ко времени, чтобы напоминать пользователю о предстоящих встречах. Схема уведомлений по умолчанию для календарного приложения может заключаться в показе первого предварительного уведомления за час до встречи, а затем еще одного, более срочного уведомления за пять минут до нее.
Телеканал может напомнить пользователям о том, что скоро начнётся их любимая телепередача или прямая трансляция конференции.
Сайты, использующие функцию конвертации часовых поясов, могут применять уведомления, основанные на времени, чтобы позволить пользователям устанавливать будильники для телефонных конференций или видеозвонков.
Текущий статус
| Шаг | Статус |
|---|---|
| 1. Создайте пояснительное видео. | Полный |
| 2. Создайте первоначальный черновик спецификации. | Не началось |
| 3. Соберите отзывы и доработайте дизайн. | В ходе выполнения |
| 4. Испытание происхождения | Полный |
| 5. Запуск | Не началось |
Используйте триггеры уведомлений
Чтобы поэкспериментировать с 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 . Чтобы начать отладку, нажмите «Начать запись событий».
или Ctrl + E ( Command + E на Mac). Инструменты разработчика Chrome записывают все события уведомлений, включая запланированные, отображаемые и закрытые уведомления, в течение трех дней, даже когда Инструменты разработчика закрыты.


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

Безопасность и права доступа
Команда Chrome разработала и внедрила API для запуска уведомлений, используя основные принципы, изложенные в документе «Управление доступом к мощным функциям веб-платформы» , включая пользовательский контроль, прозрачность и эргономику. Поскольку этот API требует наличия сервисных работников, он также требует безопасного контекста. Использование API требует тех же разрешений, что и для обычных push-уведомлений.
Управление пользователем
Этот API доступен только в контексте ServiceWorkerRegistration . Это означает, что все необходимые данные хранятся в одном контексте и автоматически удаляются при удалении ServiceWorker или при удалении пользователем всех данных сайта для исходного ресурса. Блокировка cookie также предотвращает установку ServiceWorker в 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 и расскажите нам, где и как вы используете эту функцию.
Полезные ссылки
- Публичное пояснение
- Отслеживание ошибки
- Запись на ChromeStatus.com
- Компонент Blink:
UI>Notifications
Благодарности
Система Notification Triggers была разработана Ричардом Ноллом , а пояснение к ней написал Питер Беверлоо при участии Ричарда. Следующие лица рецензировали статью: Джо Медли , Пит Лепейдж , а также Ричард и Питер.