Как запланировать push-уведомление Chrome?

Я использую push-уведомление Chrome для пользователей моего веб-сайта. Что я могу успешно сделать с помощью сервисного работника. Я слежу за этими статьями / руководствами

  1. https://developers.google.com/web/updates/2015/03/push-notifications-on-the-open-web?hl=en
  2. http://www.html5rocks.com/en/tutorials/service-worker/introduction/

Это очень хорошо работает, когда я хочу отправить уведомление СЕЙЧАС, т.е. без планирования на будущее.

Моя проблема:

Я хочу запланировать это уведомление, чтобы оно могло повторяться позже в тот же день, что я могу сделать с помощью cron. Но GCM не отправляет вам полезные данные, как указано здесь https://developers.google.com/web/updates/2015/03/push-notifications-on-the-open-web?hl=en, и я цитирую.

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

Из-за этого я не могу понять, для какого запланированного уведомления я получил push-событие в браузере. Поскольку в GCM может быть отправлено несколько уведомлений.

Я получаю последнюю запись в таблицах уведомлений, т.е. я всегда показываю данные последней записи. Поскольку я не знаю, для какого уведомления я получаю событие push в браузере Chrome.

Мой вопрос:

Есть ли обходной путь для планирования уведомлений и отображения правильных уведомлений клиенту / браузеру? Возможно ли это вообще в родном chrome push api?


person ʞɹᴉʞ ǝʌɐp    schedule 08.12.2015    source источник


Ответы (3)


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

Мы планируем предоставить поддержку полезных данных в Chrome 49 (стабильный канал должен выйти в марте). Это позволяет включать в сообщения до 4 КБ данных и должно решить вашу проблему.

Обратите внимание, что при использовании полезной нагрузки вам потребуется зашифровать данные, включенные в сообщение. У нас будет обширная статья (похожая на ту, на которую вы ссылаетесь) и библиотеки, доступные при запуске.

person Peter Beverloo    schedule 09.12.2015
comment
Есть ли какие-либо обновления относительно того, когда будет поддерживаться полезная нагрузка данных при посадке в сборках Canary / Beta / Stable? - person Kanishk Dudeja; 14.02.2016

Google Chrome в настоящее время тестирует новый API триггеров уведомлений, который делает это.

Вот пример (из приведенной выше ссылки), в котором назначается напоминание за 10 минут до встречи:

async function createAppointment(tag, title, timestamp) {
  // .. create the appointment in application-level code ..

  // Schedule a reminder to be shown to the user:
  await swRegistration.showNotification(title, {
    tag, body: 'Your appointment is due in ten minutes!',
    showTrigger: new TimestampTrigger(timestamp - TEN_MINUTES)
  });
}

Вы можете немедленно включить API триггеров уведомлений на своем сайте, подписавшись на исходную пробную версию здесь < / а>.

person Ethan    schedule 20.03.2020

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

Другое решение - взять все непрочитанные сообщения в одном fetch запросе и показать их все пользователю. При этом у вас могут быть «пустые» нажатия, которые ничего не делают.

person Oleg    schedule 10.12.2015