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

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

Я следую этому руководству: https://developers.google.com/web/fundamentals/codelabs/push-notifications/

Все идет хорошо, но что-то не так.

При каждой загрузке страницы сервис-воркер регистрируется, затем проверяет, подписаны ли они уже, а затем, даже если они подписаны, вызывает updateSubscriptionOnServer(), который содержит следующий комментарий:

// TODO: Send subscription to application server

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

Является ли это ожидаемым подходом с Web Push API?

Большое спасибо


person SpongeBobPHPants    schedule 07.02.2018    source источник


Ответы (1)


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

  1. Пользователь мог изменить разрешение с blocked на granted (или по умолчанию) в настройках браузера, поэтому вы хотите создать подписку и отправить ее на сервер
  2. Конечная точка подписки может измениться по разным причинам, поэтому необходимо убедиться, что текущая конечная точка отправлена ​​на сервер (предыдущая конечная точка вернет 410 Gone)

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

person collimarco    schedule 07.02.2018
comment
Отличный ответ, спасибо. Не могу попросить лучшего объяснения, поэтому я приму это. - person SpongeBobPHPants; 07.02.2018
comment
Другой компромисс может состоять в том, чтобы сделать это один раз за сеанс (установить файл cookie сеанса, когда подписка отправляется на сервер, и не отправлять его снова, если файл cookie не существует). - person stepanian; 09.05.2018