Уникальный идентификатор Firebase для каждой учетной записи пользователя - PullRequest
1 голос
/ 11 апреля 2019

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

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

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

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

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

FirebaseInstanceId.getInstance().deleteInstanceId()

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

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

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

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

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

0 голосов
/ 11 апреля 2019

Лучший способ решить вашу проблему - использовать 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");
...