Firebase onTokenRefresh () no se llama

En mi MainActivity en mi registro, puedo ver el token usando FirebaseInstanceId.getInstance().getToken() y muestra el token generado. Pero parece que en MyFirebaseInstanceIDService donde se extiende a FirebaseInstanceIdService , no se llama a onTokenRefresh() , donde en esta función se dice que el token se genera inicialmente aquí. Necesitaba llamar a sendRegistrationToServer() es por eso que estoy tratando de saber por qué no entra en onTokenRefresh() .

Aquí está mi código

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

onTokenRefresh en FirebaseInstanceIdService solo se invoca cuando se genera un nuevo token. Si su aplicación se instaló previamente y se generó un token, no se invocará onTokenRefresh. Intente desinstalar y volver a instalar la aplicación para forzar la generación de un nuevo token, esto provocaría que se llame a OnTokenRefresh.

También asegúrese de que su FirebaseInstanceIdService esté definido correctamente en su AndroidManifest.xml

En su archivo de manifiesto.

            

Clase FirebaseInstanceIdService

 public class MyFireBaseInstanceIDService extends FirebaseInstanceIdService { private static final String TAG = MyFireBaseInstanceIDService.class.getSimpleName(); @Override public void onTokenRefresh() { // Get updated InstanceID token. String refreshedToken = FirebaseInstanceId.getInstance().getToken(); Log.d(TAG, "Refreshed token: " + refreshedToken); if (refreshedToken!=null) { SettingPreferences.setStringValueInPref(this, SettingPreferences.REG_ID, refreshedToken); } // TODO: Implement this method to send any registration to your app's servers. sendRegistrationToServer(refreshedToken); } // [END refresh_token] /** * Persist token to third-party servers. * * Modify this method to associate the user's FCM InstanceID token with any server-side account * maintained by your application. * * @param token The new token. */ private void sendRegistrationToServer(String token) { // Add custom implementation, as needed. }} 

Clase FirebaseMessagingService.

 public class GCMNotificationIntentService extends FirebaseMessagingService { // Sets an ID for the notification, so it can be updated public GCMNotificationIntentService() { super(); } @Override public void onMessageReceived(RemoteMessage message) { }} 

Tuve el mismo problema que tú. Mi error fue el siguiente: coloqué mis tags fuera de la etiqueta en el archivo AndroidManifest.xml.

Ahora el mío se ve así:

             

Y funciona sin ningún problema.

Intente volver a instalar la aplicación, desinstálela primero de su dispositivo o emulador. Luego generará un nuevo token, por lo que onTokenRefresh () se volverá a llamar.

Sí, esto puede suceder algunas veces.

Por favor llame al siguiente método donde quiera obtener su identificación de fcm.

  try { String refreshedToken = FirebaseInstanceId.getInstance().getToken(); Log.d("Firbase id login", "Refreshed token: " + refreshedToken); } catch (Exception e) { e.printStackTrace(); } 

En mi caso, olvidé agregar el permiso de Internet en manifiesto,

  

Espero que la mayoría de la gente no cometa este error.

 try { FirebaseInstanceId.getInstance().deleteInstanceId(); } catch (IOException e) { e.printStackTrace(); } 

en el método onCreate para eliminar token.

Asegúrate de haber agregado

aplicar el complemento: ‘com.google.gms.google-services’

esto al final del archivo app.gradle

En mi caso, probé todo pero nunca se llamó onTokenRefresh . Luego cambio mi WiFi y me conecto a una red diferente. ¡Ahora funcionó! Anterior WiFi tiene buena conectividad a Internet, no sé por qué estaba sucediendo. Puede ser que esto pueda ayudar a alguien.

Reinstalar hizo el truco para mí!

He experimentado que no se llama a MyFirebaseInstanceIDService cuando está ejecutando su aplicación en un dispositivo donde la conectividad a Internet no está disponible. De esta forma, onTokenRefresh () no se llama. Así que asegúrese de que su dispositivo debe tener conexión a Internet durante la ejecución de su aplicación para tomar FirebaseToken actualizado.

También desinstala la aplicación anterior y vuelve a instalarla para tomar el token actualizado. El token de registro cambia cuando:

1) La aplicación elimina la identificación de la instancia

2) La aplicación se restaura en un nuevo dispositivo

3) El usuario desinstala / reinstala la aplicación

4) El usuario borra los datos de la aplicación.

He estado luchando con eso por más de una hora, luego cambié el siguiente código y de repente funcionó.

maneje su refrescadoToken como tal:

 String refreshedToken; try { refreshedToken = FirebaseInstanceId.getInstance().getToken(); Log.d(TAG, "Refreshed token: " + refreshedToken); Localytics.setPushRegistrationId(refreshedToken); } catch (Exception e) { Log.d(TAG, "Refreshed token, catch: " + e.toString()); e.printStackTrace(); } 

Intente agregar android: exported = “true”> a ambos MyFirebaseMessagingService y MyFirebaseInstanceIDService en manifiesto para que se vea así:

           

Desinstalar su aplicación, instalar de nuevo, funcionó. Probado en un dispositivo real.

android: exported = “true” es una opción predeterminada por lo que también puede eliminarla por completo y se establecerá en verdadero.

Además, si desea llamar aTokenRefresh más explícitamente, puede simplemente llamar a cualquier parte de su código:

 String refreshedToken = FirebaseInstanceId.getInstance().getToken(); Localytics.setPushRegistrationId(refreshedToken); 

No tiene que depender de que la transmisión se reciba más

Yo tuve el mismo problema. Mi dispositivo (kitkat 4.4.2) no pudo conectarse aTokenRefresh () por algún motivo. Mi conexión a Internet era perfecta, los servicios de google play estaban actualizados y se cumplieron todas las condiciones necesarias para que Firebase funcione. Mi código funcionó perfectamente en los dispositivos 5.0.0 y posteriores. Para resolver este problema tuve que restablecer mi dispositivo a la configuración de fábrica y la aplicación comenzó a funcionar. Sé que es una medida difícil, pero tal vez pueda ayudar a alguien. Debe haber algunos problemas o conflictos con otras aplicaciones, lo que provocó que no se llamara aTokenRefresh (). ¡Buena suerte!