Уникальный идентификатор Firebase для каждой учетной записи пользователя

1

Я не уверен, как правильно обрабатывать разные учетные записи пользователей на одном устройстве, поскольку Firebase создает только один Instance-Id для каждого устройства.

Поэтому я подумал, что было бы возможно удалить Instance-Id, когда пользователь вышел из системы, и создать новый, когда новый пользователь вошел в систему.

При входе в систему:

FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener(task -> System.out.println(task.getResult().getToken()));

На выходе:

FirebaseInstanceId.getInstance().deleteInstanceId()

Гарантирует ли Firebase, что Instance-Id будет уникальным, даже если он генерируется несколько раз на одном устройстве? Причины, по которым я предпочитаю такой подход, заключаются в том, что он просто отменяет подписку на пользователя сразу по всем темам, и, кроме того, push-уведомления могут быть адресованы конкретному пользователю.

Теги:
firebase
push-notification

3 ответа

0

Гарантирует ли Firebase, что Instance-Id будет уникальным, даже если он генерируется несколько раз на одном устройстве?

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

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

  • 0
    Спасибо за совет. Я нашел следующее утверждение: «Один экземпляр приложения может быть подписан не более чем на 2000 тем». Вы знаете, относится ли «экземпляр приложения» к идентификатору экземпляра приложения на одном устройстве или ко всему проекту? Если первое утверждение верно: было бы целесообразно создать тему для каждого пользователя, чтобы все устройства, на которых зарегистрирован пользователь, могли подписаться на него? Или я должен отправлять уведомления всем токенам устройств, которые принадлежат учетной записи пользователя? Первый подход будет намного проще, так как мне нужен только идентификатор пользователя в моей базе данных.
  • 0
    Создание темы для каждого пользователя не является редкостью. Просто имейте в виду, что любой может подписаться на тему, если он знает название темы, и что разветвление темы находится вне вашего контроля и может быть медленнее, чем разветвление самостоятельно.
Показать ещё 2 комментария
0

создать объект firebaseuser: -

private FirebaseUser firebaseUser;
String userId = firebaseUser.getUid();
0

Лучший способ решить вашу проблему - это использовать topic сообщений.

Из документов:

Основываясь на модели публикации/подписки, обмен сообщениями по темам FCM позволяет отправлять сообщения нескольким устройствам, которые выбрали определенную тему. По мере необходимости вы создаете тематические сообщения, а FCM обеспечивает надежную маршрутизацию и доставку сообщений на нужные устройства.

Когда пользователь входит в приложение, вы можете подписаться на определенную тему, например:

FirebaseMessaging.getInstance().subscribeToTopic("weather")
    .addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            String msg = getString(R.string.msg_subscribed);
            if (!task.isSuccessful()) {
                msg = getString(R.string.msg_subscribe_failed);
            }
            Log.d(TAG, msg);
            Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
        }
    });

Затем пользователь может получать уведомления на основе названия темы. Затем, когда пользователь нажимает кнопку выхода из системы, вы можете вызвать следующее:

FirebaseMessaging.getInstance().unsubscribeFromTopic("weather");
  • 0
    у вас может быть несколько пользователей, подписанных на одну тему .. у вас может быть 2000 пользователей, подписанных на тему a, и 2000 других пользователей, подписанных на тему b ..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню