В первый день Indie Web Camp в Берлине я провела сессию на тему Отключение с сервис-воркерами. Это охватывало все обычные варианты использования: предварительное кэширование; настраиваемые офлайн-страницы; сохранение страниц для чтения в автономном режиме.
Но на второй день Себастьян потратил немало времени на изучение более сложного использования сервис-воркеров с Push API.
Push-API - это то, что делает возможными push-уведомления в Интернете. Есть много движущихся частей - браузер, сервер, сервис-воркер - и, честно говоря, все это у меня над головой. Но я знаком с общей сутью того, как это работает. Вот типичный алгоритм:
- Веб-сайт запрашивает у пользователя разрешение на отправку push-уведомлений.
- Пользователь предоставляет разрешение.
- За кадром происходит множество сложных вещей.
- В следующий раз, когда веб-сайт публикует что-то актуальное, он запускает push-сообщение, содержащее подробную информацию о новом URL-адресе.
- Сервисный работник пользователя получает push-сообщение (даже если сайт не открыт).
- Сервисный работник создает уведомление, ссылающееся на URL-адрес, прерывая пользователя и, как правило, увеличивая информационную перегрузку.
Вот что Себастьян хотел исследовать: что, если бы этот последний шаг не был таким навязчивым? Вот альтернативный алгоритм, который он хотел проверить:
- Веб-сайт запрашивает у пользователя разрешение на отправку push-уведомлений.
- Пользователь предоставляет разрешение.
- За кадром происходит множество сложных вещей.
- В следующий раз, когда веб-сайт публикует что-то актуальное, он запускает push-сообщение, содержащее подробную информацию о новом URL-адресе.
- Сервисный работник пользователя получает push-сообщение (даже если сайт не открыт).
- Service worker извлекает содержимое URL-адреса, указанного в push-сообщении, и кэширует страницу. Молча.
Это сработало.
Я думаю, это может изменить правила игры. Не знаю, как вы, но я очень, очень опасаюсь предоставлять веб-сайтам возможность отправлять мне push-уведомления. На самом деле, я не думаю, что когда-либо давал веб-сайту разрешение прерывать меня push-уведомлениями.
Вы ведь видели надоедливые диалоги разрешений, верно?
В Firefox это выглядит так:
Разрешите ли вы отправлять уведомления по названию веб-сайта?
[Не сейчас] [Разрешить уведомления]
В Chrome это:
имя-веб-сайта хочет
Показать уведомления
[Заблокировать] [Разрешить]
Но на самом деле в этих диалогах запрашивается разрешение на выполнение двух действий:
- Получать сообщения, отправленные с сервера.
- Отображать уведомления на основе этих сообщений.
Невозможно попросить разрешения только на первую часть. Это позор. Хотя я очень не хочу давать разрешение на то, чтобы меня прерывали навязчивые уведомления, я был бы более чем готов предоставить разрешение, позволяющее веб-сайту молча кэшировать своевременный контент в фоновом режиме. Это была бы более спокойная технология.
Подумайте о вариантах использования:
- Даю разрешение на толчок журналу. Когда журнал публикует новую статью, она сохраняется в кеше на моем устройстве.
- Даю разрешение на толчок подкасту. Каждый раз, когда публикуется новый выпуск, он сохраняется в кеше на моем устройстве.
- Даю разрешение на толчок в блог. Когда появляется новая запись в блоге, она сохраняется в кеше на моем устройстве.
Затем, когда я в самолете, в метро или в любой другой ситуации без подключения к сети, я все равно могу посещать эти веб-сайты и получать свежую информацию. Это что-то вроде фоновой синхронизации в обратном направлении.
Существует множество возможностей для злоупотреблений - кеш может быть заполнен контентом. Но веб-сайты уже могут это делать, и им не нужно предоставлять для этого какие-либо разрешения; Просто посетив веб-сайт, он может добавить несколько файлов в кеш.
Похоже, что причина диалога о разрешениях - это отображение уведомлений… не столько получение push-сообщений с сервера.
Хотелось бы, чтобы был способ реализовать этот шаблон фонового кэширования, не требуя от пользователя предоставления разрешения на диалог, содержащий слово «уведомление».
Интересно, может ли действие добавление сайта на главный экран неявно предоставлять разрешение на использование Push API без уведомлений?
Между тем, предложение периодической синхронизации (с использованием фоновой синхронизации) могло бы дать аналогичные результаты, но менее элегантным способом; периодически опрашивать новое содержимое вместо получения push-сообщения при публикации нового содержимого. Кроме того, для этого требуется разрешение. Но, по крайней мере, в этом случае диалоговое окно разрешения должно быть более конкретным и нигде не должно содержать слова уведомление.
Изначально это было размещено на моем собственном сайте.