Как определить, нужно ли обновлять токен в случае нескольких идентификаторов отправителя? - PullRequest
0 голосов
/ 14 сентября 2018

Мое приложение получает push-уведомление от проекта 2 firebase. Я получаю токены для каждого идентификатора отправителя, вызывая «getToken (String authorEntity, String scope)) отдельно.

String token1 = FirebaseInstanceId.getInstance().getToken("authorizedEntity1", "FCM");
String token2 = FirebaseInstanceId.getInstance().getToken("authorizedEntity2", "FCM");

Согласно документации onTokenRefresh

Вызывается, когда система определяет, что токены необходимо обновить. Прикладная программа должна вызывать getToken () и отправлять токены всем серверам приложений. Это будет вызываться не очень часто, это необходимо для ротации ключей и для обработки изменений ID экземпляра в связи с:

Приложение удаляет идентификатор экземпляра

Приложение восстановлено на новом устройстве

Пользователь удаляет / переустанавливает приложение

Пользователь очищает данные приложения

Поскольку onTokenRefresh устарело , я проверил onNewToken , согласно документации

Вызывается при создании нового токена для проекта Firebase по умолчанию. Это вызывается после установки приложения при первом создании токена и снова при изменении токена.

Q1. Как узнать, какой проект Firebase используется по умолчанию в случае нескольких идентификаторов отправителей?

Q2. Предположим, если «authorEntity1» связан с проектом Firebase по умолчанию, значит ли это, что onNewToken будет вызываться только тогда, когда token1 будет изменен? или он также будет вызван, когда token2 будет изменен? Если это не работает для token2, то как узнать, что token2 нужно обновить?

Q3. Со ссылкой this Насколько я понимаю, onTokenRefresh будет вызываться всякий раз, когда необходимо обновить любой токен (не только для проекта по умолчанию). Это понимание правильно?

Я хочу отправлять обновленный токен на сервер всякий раз, когда система определяет, что token1 или token2 необходимо обновить.

Примечание: Я инициализирую firebase в своем классе приложений, поскольку имею дело с несколькими идентификаторами отправителей.

Ответы [ 2 ]

0 голосов
/ 29 января 2019

В зависимости от комментария @sNash, связавшегося со службой поддержки Firebase, вы должны управлять токенами для всех идентификаторов отправителей, кроме идентификатора отправителя по умолчанию.

Как?Одним из простых решений является сохранение всех идентификаторов отправителей с их токенами в SharedPreferences или в БД.Когда приложение запускается, проверьте, изменился ли токен для каждого отправителя, сравнив сохраненный токен с токеном, возвращенным

FirebaseInstanceId.getInstance().getToken(SENDER_ID, "FCM");

. Кроме того, выполните ту же проверку в методе onNewToken .Существует вероятность того, что токены, отличные от токена по умолчанию, могут быть изменены при изменении токена по умолчанию.

Отправителем по умолчанию является отправитель по умолчанию, связанный с вашим проектом Firebase, к которому оно подключено, и его можно найти в Google.-services.json

0 голосов
/ 20 сентября 2018

После некоторого теста я обнаружил, что на onNewToken будет доставлен только токен проекта по умолчанию.onNewToken не будет вызываться, когда новый токен, созданный для идентификаторов других отправителей с помощью вызова getToken.

Токены, полученные с помощью вызова getToken API, состоят из строковых данных, отличных от токена по умолчанию.

И токены идентификаторов других отправителей не обновляются при изменении токенов по умолчанию.Похоже, они длятся до тех пор, пока вы явно не вызовете deleteToken API.(Значение токена не изменилось, когда я неоднократно вызывал getToken.)

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