Что использовать теперь, когда FirebaseInstanceId.getInstance (). GetToken () устарел

Я хотел бы знать, как правильно получить токен Firebase для отправки push-уведомления теперь, когда getToken () устарел.

Простой stackoverflow.com/a/52120871/6891563

Khemraj Sharma 29.10.2018 11:44

быстрый доступ с помощью FirebaseInstanceId.getInstance (). getId ();

smj 14.12.2018 23:51
96
2
96 467
2

Ответы 2

ОБНОВЛЕННЫЙ ОТВЕТ

FirebaseInstanceId устарел, но теперь вы можете использовать FirebaseInstallations.getInstance (). GetToken () или Токен FirebaseMessaging.getInstance ()..

Например:

FirebaseInstallations.getInstance().getToken(true).addOnCompleteListener {
        fbToken = it.result!!.token
        // DO your thing with your firebase token
}

Или другой вариант:

FirebaseMessaging.getInstance().token.addOnCompleteListener {
        if (it.isComplete){
            fbToken = it.result.toString()
            // DO your thing with your firebase token
        }
}

СТАРЫЙ ОТВЕТ

Как говорит документация:

This method was deprecated. In favour of getInstanceId().

getInstanceId () вернет Задачу с InstanceIdResult. Как это:

 FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener( new OnSuccessListener<InstanceIdResult>() {                    
                @Override
                public void onSuccess(InstanceIdResult instanceIdResult) {
                      String deviceToken = instanceIdResult.getToken();
                      // Do whatever you want with your token now
                      // i.e. store it on SharedPreferences or DB
                      // or directly send it to server 
                }
});

Хотя это правда, что этот подход буквально заменит использование FirebaseInstanceId.getInstanceId (). GetToken (), он не решает того факта, что FirebaseInstanceIdService также устарел, оставляя нам другой вопрос: где его использовать? Его можно использовать в любом контексте Activity, чтобы он всегда возвращал токен. Но что, если мы хотим получить токен только при создании и когда он редко обновляется? Для этого вы должны переопределить новый метод onNewToken из нашей старой реализации FirebaseMessagingService: (Да, «Обмен сообщениями», а не «InstanceId»)

@Override
public void onNewToken(String s) {
    super.onNewToken(s);
    String deviceToken = s;
    // Do whatever you want with your token now
    // i.e. store it on SharedPreferences or DB
    // or directly send it to server 
}

Таким образом, код останется более компактным и даже не потребуется использовать первый подход.

Я использую это во фрагменте, и он показывает, что на нестатический метод getInstanceId () нельзя ссылаться из статического контекста.

Bhaskar Jyoti Dutta 01.07.2018 19:20

Извините моя ошибка. Я отредактировал ответ на вызов getInstance, так как getInstanceId является методом экземпляра.

Facundo Larrosa 01.07.2018 19:22

@jantoo вы пробовали отредактированный ответ?

Facundo Larrosa 01.07.2018 19:27

@BhaskarJyotiDutta Ты сделал это !. Также, пожалуйста, одобрите правку, которую я предложил, чтобы использовать правильный способ и грамматику для запроса в Stack Overflow.

Facundo Larrosa 01.07.2018 19:38

Прости я не понял. Я плохо говорю по-английски? (Извините, если я допустил ошибку)

Bhaskar Jyoti Dutta 01.07.2018 19:46

Обратный вызов onSuccess вводится только один раз, в первый раз. Если вы хотите получить Токен, который приложение уже зарегистрировало во второй раз? Я пытаюсь найти способ потребовать его, не сохраняя в настройках приложения

phemt.latd 03.07.2018 10:56

@ phemt.latd Я не понял вашего вопроса.

Facundo Larrosa 03.07.2018 14:56

@Facundo, извините, если вы используете новый async listener для получения токена, в первый раз, когда приложение получит его, в следующий раз, когда приложение не запустит обратный вызов, потому что токен уже сгенерирован. Есть ли способ получить уже сгенерированный токен, или вы должны сохранить его в SharedPreferences при срабатывании обратного вызова успеха?

phemt.latd 06.07.2018 16:01

@ phemt.latd этот код всегда возвращает токен, а не только в первый раз. Он будет выполнен только при обновлении токена, если вы поместите этот код в метод onTokenRefresh. если вы хотите получать токен при каждом запуске приложения, вы можете включить этот код в свой метод MainActivity.onCreate.

Facundo Larrosa 06.07.2018 16:52

Зачем пропускать context, если на самом деле можно обойтись без него? !!

Hamzeh Soboh 12.07.2018 19:00

@HamzehSoboh Я редактировал, как и в случае с InstanceIdResult, возможно, в этом нет необходимости, но чтобы ответить на ваш вопрос, взгляните на этот ссылка на сайт о слушатели с ограниченным объемом активности.

Facundo Larrosa 13.07.2018 16:12

@Facundo, до того как был введен onNewToken, onTokenRefresh должен был вызывать всякий раз, когда система аннулирует токены. Такое же поведение для onNewToken? Будет ли вызываться onNewToken, когда мои существующие токены необходимо обновить или когда система сделает недействительными любые существующие токены?

Hey You 16.09.2018 09:07

@ Эй, ты хороший вопрос. Я не нашел никакой документации, описывающей такое поведение. Пойду еще немного по этому поводу.

Facundo Larrosa 17.09.2018 03:30

В документации @Facundo говорится: «Вызывается, когда создается новый токен для проекта Firebase по умолчанию. Он вызывается после установки приложения, когда токен создается впервые, и снова, если токен изменяется». Интересная часть - «снова, если токен изменится», означает ли это, что он также будет вызываться, когда система определит, что токен необходимо обновить?

Hey You 17.09.2018 03:46

@ Привет, ты уверен, он вызывается каждый раз, когда токен обновляется.

Facundo Larrosa 19.09.2018 05:02

Это не решение, когда вам нужен токен вне обратного вызова. Это не работает.

Pedro Paulo Amorim 25.09.2018 12:39

@PedroPauloAmorim Я согласен. newToken, похоже, не вызывается на 100%, поэтому требуется другой метод для получения существующего токена

behelit 29.03.2019 01:12

@behelit Мое решение состояло в том, чтобы продолжать попытки получить его, пока система не вернет действительное значение (также известное как рекурсивное).

Pedro Paulo Amorim 01.04.2019 13:13

Есть ли проблема, если я добавлю FirebaseInstanceId.getInstance (). GetInstanceId (). AddOnSucces‌ sListener (...) в средство запуска действий onCreate (), поэтому он будет вызываться все время, когда пользователь открывает мое приложение?

Carlos Eduardo Ki Lee 22.01.2020 20:54

@CarlosEduardoKiLee, проблем быть не должно. Это может быть не лучшей практикой, поскольку он будет возвращать то же значение, пока токен не будет обновлен.

Facundo Larrosa 26.01.2020 05:08

это снова устарело

DjongaNelson Lontrowski 23.11.2020 12:51

FirebaseInstallations.getInstance (). GetToken (true) НЕ ВЫДАЕТ ЖЕТОН СООБЩЕНИЙ, ОН МЕНЯЕТСЯ ПОСЛЕ КАЖДОГО ЗАПУСКА

TootsieRockNRoll 04.03.2021 17:14

FirebaseInstanceIdService устарел.!

просто переопределите onNewToken() в FirebaseMessagingService

public class LatestFirebaseMessagingService extends FirebaseMessagingService {

@Override
public void onNewToken(String mToken) {
    super.onNewToken(mToken);
    Log.e("TOKEN",mToken);
}

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);
}} 

InAndroidManifest.xml

<service
        android:name = ".LatestFirebaseMessagingService"
        android:stopWithTask = "false">
        <intent-filter>
            <action android:name = "com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
</service>

getToken() Это тоже устарело.!

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

FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener( MyActivity.this,  new OnSuccessListener<InstanceIdResult>() {
     @Override
     public void onSuccess(InstanceIdResult instanceIdResult) {
           String mToken = instanceIdResult.getToken();
           Log.e("Token",mToken);
     }
 });

И теперь FirebaseInstanceId устарел, ура

mliu 09.12.2020 04:58

Вы нашли какое-нибудь решение @mliu?

SweArmy 06.01.2021 05:00

FirebaseMessaging.getInstance (). GetToken () - это новый способ .... источник: firebase.google.com/docs/cloud-messaging/android/…

Jerry Polo 19.01.2021 14:18

таким образом, это устарело ..

zeroDivider 22.01.2021 16:07

примечание: если вы не получаете onNewToken так часто, как вы думаете, это проблематично, если у вас есть многопользовательская поддержка

Kibotu 11.06.2021 12:47

Другие вопросы по теме