it-swarm.com.ru

В какой период меняется токен приложения firebase и как им управлять?

Я новичок в огне, я учусь этому, как малыш, который учится ходить. До сих пор мне удалось отправить сообщение на мой телефон с помощью токена, сгенерированного для моего телефона с помощью firebase framework. Теперь вот где это становится сложно (по моему мнению). В расширенной службе FirebaseInstanceIdService есть метод onTokenRefresh(). Поскольку он называется refresh , то я предполагаю, что он изменится. Я хочу знать, когда этот токен создан и когда он будет изменен?

И если это изменится, предположим, что я отправляю сообщение на устройство с токеном «А», который пока недоступен, поэтому он будет поставлен в очередь. Теперь, когда устройство подключается к сети, оно «обновит» токен до «B». Теперь, поскольку сообщение должно было быть доставлено на токен «A», оно никогда не будет доставлено. Как я могу справиться с этой ситуацией?

40
roostaamir

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

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

Когда произойдет обновление токена, все сообщения, которые были «успешно» отправлены (API вернул вам идентификатор сообщения) на старый токен, будут доставлены.

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

50
Diego Giorgini

При первом запуске вашего приложения SDK FCM генерирует маркер регистрации для экземпляра клиентского приложения. Как сказано выше, это редкое событие. А именно, регистрационный токен может измениться, когда:

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

Идентификатор экземпляра предоставляет уникальный идентификатор для каждого экземпляра вашего приложения. Идентификатор экземпляра предоставляет простой API для генерации токенов безопасности, которые позволяют третьим сторонам получать доступ к управляемым ресурсам на стороне сервера вашего приложения. Сервер идентификатора экземпляра может даже сообщать вам, когда устройство, на котором работает ваше приложение установлен последний раз. Мы можем использовать это, чтобы решить, сохранять ли данные из приложения или отправлять Push-сообщение для повторного взаимодействия с пользователями.

Каждый раз, когда токен устройства изменяется, это отражается в методе onTokenRefresh (). Для получения токена устройства, когда он изменяется, мы можем вызвать этот метод, чтобы получить обновленный токен.

и чтобы получить токен устройства в любое время, мы можем использовать метод FirebaseInstanceId.getInstance (). getToken (), чтобы получить текущий токен устройства. Для получения токена устройства требуется некоторое время.

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

21
Prakhar Anand
  • onTokenRefresh () и FirebaseInstanceIdService устарели.
  • Этот вызов также не рекомендуется FirebaseInstanceId.getInstance (). GetToken ()

Вместо, вы должны переопределить onNewToken (String token) в FirebaseMessagingService. Этот метод срабатывает при смене токена. Переопределив этот метод, вы можете безопасно удалить FirebaseInstanceIdService, который содержит onTokenRefresh ().

Когда токен может измениться?

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

Как получить текущий токен:

вызывая FirebaseInstanceId.getInstance (). getInstanceId ():

FirebaseInstanceId.getInstance().getInstanceId()
    .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
        @Override
        public void onComplete(@NonNull Task<InstanceIdResult> task) {
            if (!task.isSuccessful()) {
                Log.w(TAG, "getInstanceId failed", task.getException());
                return;
            }

            // Get new Instance ID token
            String token = task.getResult().getToken();

            // Log and toast
            String msg = getString(R.string.msg_token_fmt, token);
            Log.d(TAG, msg);
            Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
        }
    });

Для получения дополнительной информации: https://firebase.google.com/docs/cloud-messaging/Android/client

Для управления токенами для определенного идентификатора отправителя (кроме идентификатора отправителя по умолчанию), проверить здесь

0
Islam Assi