Подписаться пользователя на тему в Firebase, когда uid изменился - PullRequest
0 голосов
/ 30 августа 2018

Мой вопрос: Когда я подписываю пользователя на чат, скажем, что у чата есть идентификатор «xDs50Yss70», пользователь остается подписанным, пока пользовательский идентификатор Firebase не изменился. Однако, когда пользовательский идентификатор Firebase изменяется, например, когда пользователь удалил приложение и снова загрузил его, пользователь больше не подписывается на чат и другие подписки, которые могут у него быть.

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

function subscribeUserToATopic(registrationTokens, chatId) {
    return admin.messaging().subscribeToTopic(registrationTokens, chatId)
}

Как мы видим, мы используем токен регистрации для подписки пользователя на chatId, я использую токен регистрации, полученный из этого кода (на стороне клиента):

@Override
public void onNewToken(String newToken) {
    super.onNewToken(newToken);

    // Send the new token to Firestore
    sendTokenToDatabase(newToken);
}

Я отправляю токен в базу данных Firestore, используя sendTokenToDatabase(), однако, когда пользователь удаляет приложение и переустанавливает его, токен меняется ... И я больше не могу отправлять push-уведомления с использованием этого кода, так как токен пользователя изменился :

admin.messaging().sendToTopic(chatId, payload, options).then(() => {
        console.log(`Push notification sent to the user(s) subscribed to the ${chatId}`)
    }).

Ответы [ 4 ]

0 голосов
/ 31 августа 2018

Токен, на который вы ссылаетесь, это регистрационный маркер устройства . Может меняться в следующих случаях:

  • Приложение удаляет идентификатор экземпляра
  • Приложение восстановлено на новом устройстве
  • Пользователь удаляет / переустанавливает приложение
  • Пользователь очищает данные приложения

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

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

0 голосов
/ 31 августа 2018

Когда пользователь впервые входит в систему аутентификации Firebase, используя электронную почту + пароль, или одного из социальных провайдеров (таких как Facebook, Google и т. Д.), Для его учетной записи определяется уникальный UID. Ибо этот UID остается неизменным после этого, пока вы не удалите свою учетную запись. Это означает, что если пользователь удаляет и переустанавливает приложение, он получит тот же UID при входе в систему.

0 голосов
/ 31 августа 2018

Это расширение ответа Фрэнка, основанное на вашем обновленном вопросе с токеном.

A Жетоны идентификатора Firebase истекают, только когда происходит одно из следующих действий:

  1. Пользователь удален
  2. Пользователь отключен
  3. Для пользователя обнаружено значительное изменение учетной записи. Это включает в себя такие события, как обновление пароля или адреса электронной почты.

Это не ваш случай, поэтому на данный момент вам нужно REVOKE обновить токены .

Отзыв токенов обновления

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

Сброс пароля также аннулирует существующие токены пользователя; Тем не менее Бэкэнд проверки подлинности Firebase автоматически обрабатывает отзыв в таком случае. При отзыве пользователь вышел из системы и получил запрос на повторная аутентификация.

Полную информацию о реализации и документации вы можете получить в документе здесь . (Длительная)

0 голосов
/ 30 августа 2018

Я могу придумать два возможных решения. Они оба требуют установки подписки снова, когда вызывается метод onNewToken , или для предыдущих версий FCM метод onTokenRefresh .

Итак, вам нужно получить список тем, на которые подписан пользователь, и subscribeToTopic снова для каждой темы. Если они есть на вашем сервере, вы можете получить их оттуда или сохранить их локально на устройстве пользователя (например, SharedPreferences, база данных и т. Д.), Получить их и установить заново.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...