Каков оптимальный способ обработки веб-push-уведомлений с несколькими устройствами на пользователя?

Я разработал веб-приложение: это викторина, в которой два пользователя по очереди играют друг против друга. Таким образом, во время матча ход либо пользователя А, либо пользователя Б. Я хочу использовать push-уведомления (используя Web Push API), чтобы информировать пользователя о том, что его оппонент сыграл и настала его очередь.

Мне интересно, есть ли оптимальный способ сделать это, используя подручные технологии (сервисные работники, Push API). А если идеального решения нет, что может быть хорошим компромиссом?

Чего я в идеале хочу достичь (вероятно, невозможного):

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

Усложнения/ограничения:

  • Настольные браузеры, такие как Chrome и Firefox, доставляют уведомление только тогда, когда они полностью запущены. Отправленные уведомления ставятся в очередь до тех пор, пока не будет запущен браузер.
  • Помимо установки времени истечения срока действия (time_to_live), нет способа отозвать уведомление после его отправки (правильно?)
  • Это означает, что когда пользователь сыграл несколько раундов на одном устройстве, на других устройствах остается довольно много устаревших уведомлений, ожидающих отображения (нехорошо).
  • Дополнительное ограничение для Chrome: вы должны показывать уведомление при получении push-сообщения.

person Seb3736    schedule 22.04.2018    source источник


Ответы (1)


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

Также используйте TTL (0 или несколько минут), чтобы автоматически удалять уведомления на устройствах, которые не подключены.

person collimarco    schedule 22.04.2018
comment
Спасибо за ответ. Проблема, с которой я столкнулся при использовании этого решения, заключается в том, что пользователь, который использует только настольный браузер, никогда не получит никакого уведомления, если его браузер не запущен во время отправки (или в течение нескольких минут в пределах TTL). - person Seb3736; 24.04.2018