Firebase Android onAuthStateChanged llamado dos veces

He empezado a trabajar con el nuevo SDK de Firebase.

Cuando estoy haciendo el inicio de sesión de usuario, estoy onAuthStateChanged método se llama dos veces con el mismo estado (etc usuario iniciar sesión).

Estoy seguro que estoy agregando el AuthStateListener solamente una vez a la referencia de FirebaseAuth.

¿Alguna ayuda?

Sí, y esto es muy molesto. Esto se debe a una llamada de registro. No sólo eso, onAuthStateChanged va a ser llamado muchas veces en muchos estados diferentes, sin posibilidad de saber qué estado es.

La documentación dice:

OnAuthStateChanged (FirebaseAuth auth)

Este método se invoca en el subproceso de interfaz de usuario en los cambios en el estado de autenticación:

  • Justo después de que el oyente haya sido registrado

  • Cuando un usuario está conectado

  • Cuando se cierra el usuario actual
  • Cuando el usuario actual cambia
  • Cuando hay un cambio en el token del usuario actual

Aquí algunos consejos para descubrir el estado actual:

  • Llamada de registro: omita la primera llamada con un indicador.
  • Usuario iniciado sesión: user from parameter is! = Null.
  • Usuario cerrado: el usuario del parámetro es == nulo.
  • El usuario actual cambia: el usuario del parámetro es! = Nulo y el último identificador de usuario es! = ID de usuario del parámetro
  • Actualización de token de usuario: el usuario del parámetro es! = Nulo y el último identificador de usuario es == ID de usuario desde el parámetro

Este oyente es un desastre y muy bugprone. El equipo de Firebase debe examinarlo.

Mi solución es utilizar un Boolean declarado globalmente para marcar si onAuthStateChanged tiene necesidad de llamar antes.

 private Boolean authFlag = false; mAuthListener = new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull final FirebaseAuth firebaseAuth) { if (firebaseAuth.getCurrentUser() != null) { if(authFlag== false) { // Task to perform once authFlag=true; } } } }; 
  • Robolectric app testing con Firebase
  • "No se puede obtener el proveedor com.google.firebase.provider.FirebaseInitProvider" Ruta de acceso de error Android
  • Cómo manejar la caducidad de token firebase personalizada en Firebase 3.xx
  • El inicio de sesión de Google no funciona después de publicarse en la tienda de juegos
  • Android Firebase DynamiteModule: Error al cargar el descriptor del módulo
  • Android Firebase - no puede obtener userid usando getUid () - Error: en la referencia de objeto nulo
  • En la API de Firebase 9.0.0, ¿cómo comprobar que el usuario tiene una sesión Auth válida o no?
  • Cómo Firebase Auth con Rails?
  • Obtener id token en la aplicación de Android y verificarlo en el servidor de back-end (¿Cómo usar id token?)
  • Rare NullPointerException en GoogleApiClient usando Firebase
  • FirebaseUI auth se está estrellando en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.