Firebase Android onAuthStateChanged called twice

Adi picture Adi · Jun 7, 2016 · Viewed 8.9k times · Source

I've start working with new Firebase SDK.

When I'm doing user login, I'm onAuthStateChanged method is being called twice with same state (etc. user sign in).

I'm sure I'm adding the AuthStateListener only once to the FirebaseAuth reference.

Any help?

Answer

Fabricio picture Fabricio · Nov 5, 2016

Yes, and this is very annoying. This is due a registration call. Not only that, onAuthStateChanged is going to be called many times in many different states, with no possibility of knowing which state it is.

Documentation says:

onAuthStateChanged(FirebaseAuth auth)

This method gets invoked in the UI thread on changes in the authentication state:

  • Right after the listener has been registered

  • When a user is signed in

  • When the current user is signed out

  • When the current user changes

  • When there is a change in the current user's token

Here some tips to discover the current state:

  • Registration call: skip the first call with a flag.
  • User signed in: user from parameter is != null.
  • User signed out: user from parameter is == null.
  • Current user changes: user from parameter is != null and last user id is != user id from parameter
  • User token refresh: user from parameter is != null and last user id is == user id from parameter

This listener is a mess and very bugprone. Firebase team should look into it.