Как управлять FCM-токенами для мультипользовательского PWA на одном устройстве эффективно? Какие существуют bewst-practices по хранению и обновлению FCM-токенов при смене пользователей на одном устройстве? Важно ли хранить токены, учитывая, что браузер один на всех, а пользователи разные? Как правильно обрабатывать FCM-токены при дизавторизации и последующей авторизации других пользователей? Как избежать проблем с консистентностью данных, связанных с FCM-токенами, при смене пользователей? Какие шаги нужно предпринять при дизавторизации пользователя для корректного управления FCM-токенами при последующей авторизации нового пользователя?
Для отправки уведомлений нескольким пользователям через WebPush с помощью FCM-токена, следует использовать сервисные воркеры и SDK Firebase Cloud Messaging. Для управления FCM-токенами для мультипользовательского PWA на одном устройстве эффективно, рекомендуется использовать уникальные идентификаторы пользователей или устройств при регистрации FCM-токена. Best-practices по хранению и обновлению FCM-токенов при смене пользователей включают в себя сохранение токенов в базе данных, связанных с соответствующим пользователем. Важно также обновлять токен при каждой смене пользователя на устройстве. Обработка FCM-токенов при дизавторизации пользователя и последующей авторизации других пользователей включает в себя удаление старого токена из базы данных и регистрацию нового токена для нового пользователя. Для избежания проблем с консистентностью данных, связанных с FCM-токенами, необходимо хранить токены в базе данных пользователя и обновлять их при каждой смене. При дизавторизации пользователя следует удалить связанные с ним FCM-токены из базы данных, чтобы избежать отправки уведомлений некорректному пользователю. При последующей авторизации нового пользователя необходимо регистрировать новый токен и связывать его с новым пользователем. Все вышеперечисленные шаги помогут обеспечить корректное управление FCM-токенами и избежать проблем с отправкой уведомлений некорректным пользователям.
В вопросе и ответе getNotificationPermission - обертка для "Notification" in window и Notification.requestPermission
Набросал решение, оно банально, и описано частично в вопросе, но все же вот, наверняка кому-то пригодится:
Добавляем в профиль признак подписки true/false
Перед фактическим logout делаем deleteToken(), localStorage.removeItem fcm-токена и удаляем соответствующую запись из таблички с девайсами - оборачиваем это в промис, чтобы успеть завершить все действия до фактического выхода.
При логине если стейт признака подписки true - проверяем getNotificationPermission() и если все ок, то делаем getToken(), в ином случае даем toast уведомление.