Firebase onTokenRefresh () no se llama

En mi MainActivity en mi registro, puedo ver el token usando FirebaseInstanceId.getInstance().getToken() y mostrar el token generado. Pero parece que en mi MyFirebaseInstanceIDService donde se extiende a FirebaseInstanceIdService , el onTokenRefresh() no se llama, donde en esta función se dijo que el token se genera inicialmente aquí. Tenía que llamar a sendRegistrationToServer() por eso estoy tratando de saber por qué no va en el 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 sólo se llama cuando se genera un nuevo token. Si su aplicación se instaló previamente y se generó un token, entonces no se llamaría OnTokenRefresh. Intente desinstalar y volver a instalar la aplicación para forzar la generación de un nuevo token, esto haría que onTokenRefresh sea llamado.

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

En su archivo de manifiesto.

  <service android:name="com.bnt.etailers.fcm.MyFireBaseInstanceIDService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT" /> </intent-filter> </service> <service android:name="com.bnt.etailers.fcm.GCMNotificationIntentService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service> 

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.e(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. }} 

FirebaseMessagingService clase.

 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: <service> etiquetas <service> fuera de la etiqueta <application> en el archivo AndroidManifest.xml.

Ahora la mía se ve así:

 <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <service android:name=".MyFirebaseMessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service> <service android:name=".MyFirebaseInstanceIDService"> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> </intent-filter> </service> </application> 

Y funciona sin ningún problema.

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

 <uses-permission android:name="android.permission.INTERNET" /> 

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

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

Sí, esto puede suceder algunas veces.

Llame al siguiente método donde quiera que desee obtener su ID de identificación.

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

En el método onCreate para eliminar el token.

En mi caso, lo intenté todo pero onTokenRefresh nunca fue llamado. Entonces cambio mi WiFi y me conecto a la diversa red , ahora trabajó !!. Anterior WiFi tiene buena conexión a Internet, no sé por qué estaba sucediendo. Puede ser esto puede ayudar a alguien.

  • ¿Cómo envía una Notificación Firebase a todos los dispositivos a través de CURL?
  • Firebase console: Cómo especificar click_action para notificaciones
  • La aplicación de Android no recibe notificación de Firebase cuando la aplicación se detiene desde la bandeja de tareas múltiples
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.