В чем отличие 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 шт):
Вы же сами приводите ответ на свой вопрос.
FirebaseInstallations для идентификаторов экземпляров приложения
InstanceId это и есть идентификатор экземпляра приложения
А вот это
FirebaseMessaging.getToken () для токенов регистрации FCM.
Для случаев старого кода типа
FirebaseInstanceId.getInstance().token // и т.п.
Хотелось бы начать с того, что раньше, когда мы использовали 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 невозможно вызвать при перехода на новые сущности. Соответственно работа теперь строится на той логике, что токен формируется однократно при установке приложения(там есть ещё особенности в виде очистки данных и т.д (см.документацию)).