Не удаляйте все подписки на push-уведомления при выходе из системы

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

Я упоминаю об этом, поскольку это связано с пониманием того, какую подписку необходимо заменить при продлении, а какую следует удалить при выходе из системы.

6 лайков

Ну, меня сегодня просто выбросило из Meta, а после входа в систему пришло push-уведомление о вашем посте… Если только это работает только при входе по инициативе пользователя :thinking:

6 лайков

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

Это не противоречит тому, что вы указали, поскольку, судя по всему, вы получили push-уведомление после входа в систему.

Ссылка на код:

6 лайков

Ага, так и есть, я так и думал.

Отличная находка! Нам обязательно нужно это исправить!

Проблема в том, что сейчас мы не храним информацию о том, для какого устройства существует конкретная подписка…

8 лайков

Push API действительно имеет функцию unsubscribe для аннулирования подписки на push-уведомления:

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

Фактически, на стороне клиента уже существует функция unsubscribePushNotification, которая выполняет это действие в настройках «Живые уведомления». Возможно, решением будет вызывать эту функцию при выходе из системы на стороне клиента, если включены «Живые уведомления». Вероятно, это хорошая практика — отзывать ключи подписки на стороне клиента, а не просто удалять их с сервера.

2 лайка

Таким образом, исправление может состоять из двух частей:

  1. Удалить код очистки на стороне сервера.
  2. Добавить новый код для отписки на стороне клиента.
5 лайков

Выполнено

https://meta.discourse.org/t/ios-android-push-notifications-on-self-hosted-discourse-docker/394149/18?u=falco

1 лайк

Эта тема была автоматически закрыта через 4 дня. Новые ответы больше не принимаются.