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

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

Ответ 1

Добавляя к Facundo ответ, у службы FirebaseMessagingService теперь есть метод onNewToken(String token) переопределить его, чтобы получить новый токен.

Примечание: я не могу опубликовать комментарий из-за недостаточной репутации

Ответ 2

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

Этот метод устарел. В пользу getInstanceId().

Используйте getInstanceId(). Он вернет Task с и 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 
                }
});

UPDATE: хотя верно, что этот подход буквально заменит использование 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 
}

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

Ответ 3

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);
}} 

В AndroidManifest.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);
     }
 });

Ответ 4

вы можете расширить FirebaseInstanceIdService и реализовать onTokenRefresh(), и в этом методе либо отправить его на ваш серверный сервер, либо сохранить его в Prefs для последующего использования.

@Override
public void onTokenRefresh() {
    // Get updated InstanceID token.
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    Log.d(TAG, "Refreshed token: " + refreshedToken);

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // Instance ID token to your app server.
    sendRegistrationToServer(refreshedToken);

    //or if you want to wait until your user is logged in
    //save it in your preferences
    saveTokenInPreferences(refreshedToken);
}