В чем отличие FirebaseInstallations от FirebaseMessaging

FirebaseInstanceId является depreceted. Если открыть официальную документацию от google, то мы можем увидеть следующее:

Этот класс устарел. Идентификатор экземпляра Firebase был заменен на FirebaseInstallations для идентификаторов экземпляров приложения и FirebaseMessaging.getToken () для токенов регистрации FCM.

У меня на проекте используются следующие методы:

FirebaseInstanceId.getInstance().deleteInstanceId()

FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener { token ->
                emitter.onSuccess(token.token)
            }

Эти методы являются deprected и хотелось бы понять, что именно использовать для того, чтобы их заменить.

Если перейти по ссылке на похожий вопрос и ответ https://stackoverflow.com/a/51129304/6050599 То можно увидеть что в ответе говорят использовать FirebaseInstallations или FirebaseMessaging Так и непонятно какой из них использовать.


Ответы (2 шт):

Автор решения: Eugene Krivenja

Вы же сами приводите ответ на свой вопрос.

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

InstanceId это и есть идентификатор экземпляра приложения

А вот это

FirebaseMessaging.getToken () для токенов регистрации FCM.

Для случаев старого кода типа

FirebaseInstanceId.getInstance().token // и т.п.
→ Ссылка
Автор решения: Tony

Хотелось бы начать с того, что раньше, когда мы использовали FirebaseInstanceId и вызывали FirebaseInstanceId.getInstance().deleteInstanceId() - то у нас при следующем запуск приложения создавался новый токен в методе fun onNewToken(token: String) в FirebaseMessagingService.

Так же хотелось бы процитировать следующую документацию

После создания идентификатора экземпляра библиотека периодически отправляет информацию о приложении и устройстве, на котором оно работает, в серверную часть Firebase. Чтобы остановить это, см. DeleteInstanceId ().

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

Далее, когда мы переходим на новые сущности такие как FirebaseInstallations и FirebaseMessaging и используем методы: FirebaseMessaging.getInstance().deleteToken() FirebaseInstallations.getInstance().delete() то метод override fun onNewToken(token: String) перестает вызываться при следующем старте приложения. И это очень важный момент.

Далее, пройдемся по новым сущностям: FirebaseMessaging.getInstance().deleteToken() используя данный метод мы сообщаем FCM,что больше не хотим иметь с ним связи и после вызова данного метода пуши перестают приходить.

FirebaseInstallations.getInstance().delete() - используя данный метод, цитирую документацию :

Вызовите, чтобы удалить эту установку приложения Firebase из серверной части Firebase.

Видимо удаление установки из серверной части Firebase никак не затрагивает работу с FCM. Пуши продолжают приходить.

В моем кейсе я отказался от логики пересоздания токена ( в depreceted виде FirebaseInstanceId.getInstance().deleteInstanceId() т.к токен теперь получатся однократно и onNewToken(token: String) в FirebaseMessagingService невозможно вызвать при перехода на новые сущности. Соответственно работа теперь строится на той логике, что токен формируется однократно при установке приложения(там есть ещё особенности в виде очистки данных и т.д (см.документацию)).

→ Ссылка