Qué usar ahora que FirebaseInstanceId.getInstance().getToken () está obsoleto [duplicar]


Esta pregunta ya tiene una respuesta aquí:

Me gustaría saber cuál sería la forma correcta de obtener Firebase token para enviar notificaciones push ahora que getToken() está obsoleta.

Author: noogui, 2018-07-01

4 answers

Añadiendo a la respuesta de Facundo, el servicio FirebaseMessagingService ahora tiene un método onNewToken(String token) que lo anula para obtener un nuevo token.

Nota: No pude publicar un comentario debido a la reputación insuficiente

 4
Author: Aeiman Bakeer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-14 18:47:56

Como dice la documentación :

Este método fue obsoleto. A favor de getInstanceId ().

Use getInstanceId(). Devolverá una tarea con e InstanceIdResult. Así:

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

ACTUALIZACIÓN : Aunque es cierto que este enfoque reemplazará literalmente el uso de FirebaseInstanceId.getInstanceId().getToken () , no resuelve el hecho de que FirebaseInstanceIdService también está obsoleto dejándonos con otra pregunta que es: ¿dónde usarlo? Se puede utilizar en cualquier contexto de actividad que siempre devolverá el token. Pero, ¿qué pasa si queremos obtener el token solo en la creación y cuando rara vez se actualiza? Para ello, debe anular el nuevo método onNewToken de nuestra antigua implementación FirebaseMessagingService : (Sí, "Mensajería", no "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 
}

De esta manera el código seguirá siendo más delgado y ni siquiera será necesario usar el primer enfoque.

 54
Author: Facundo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-05 02:33:57

FirebaseInstanceIdService fue obsoleto .!

Simplemente anula onNewToken() en 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);
}} 
{[7] {} En[5]}
<service
        android:name=".LatestFirebaseMessagingService"
        android:stopWithTask="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
</service>

getToken() Esto también está en desuso.!

Si necesita obtener token en su actividad, use el siguiente código.

FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener( MyActivity.this,  new OnSuccessListener<InstanceIdResult>() {
     @Override
     public void onSuccess(InstanceIdResult instanceIdResult) {
           String mToken = instanceIdResult.getToken();
           Log.e("Token",mToken);
     }
 });
 7
Author: KUSHA B K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-16 05:50:10

Puede extender FirebaseInstanceIdService, e implementar onTokenRefresh(), y en ese método enviarlo a su servidor backend, o guardarlo en las Preferencias para su uso posterior.

@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);
}
 -10
Author: נמרוד כהן,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-01 17:05:21