Firebase Android: Google Sign In Failure

19,682

Solution 1

I finally found the problem, I made a mistake while authenticating my app in the Firebase Console here (section "before you begin"), 4th step. I entered the debug one instead and it works now.

Thanks nonetheless!

Solution 2

You can check status of the result with result.getStatus().getStatusMessage(). Log this message or debug your result Status and it should indicate issue. Status has also getResolution() method that provides pending intent that should resolve your failure (firstly check if resolution is available with calling hasResolution(), which returns true if it can handle it for you).

Solution 3

Try changing GSO by :

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getString(R.string.default_web_client_id))
                .requestEmail()
                .build();

Hope this helps !

Share:
19,682
Scrashdown
Author by

Scrashdown

Student in computer science, mostly interested in programming in C and Scala.

Updated on June 17, 2022

Comments

  • Scrashdown
    Scrashdown almost 2 years

    First of all, I have to say I'm very very new to Android development so forgive me if I overlook something obvious.

    For a university project, I have to create an app that first authenticates users via their Google Account using Firebase. I first followed the instructions I found here.

    For a start, I copy pasted this code from Firebase Tutorial. Everything seems to be working, except for one thing :

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.d(TAG, "------------------ onActivityResult ------------------");
        super.onActivityResult(requestCode, resultCode, data);
    
        // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
        if (requestCode == RC_SIGN_IN) {
            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
            if (result.isSuccess()) {
                Log.d(TAG, "------------------ googleSignInSuccess ------------------");
                // Google Sign In was successful, authenticate with Firebase
                GoogleSignInAccount account = result.getSignInAccount();
                firebaseAuthWithGoogle(account);
                // Start menu activity once the user has been logged in
                Intent intent = new Intent(this, MenuActivity.class);
                startActivity(intent);
            } else {
                Log.d(TAG, "------------------ googleSignInFailure ------------------");
                // Google Sign In failed, update UI appropriately
                // [START_EXCLUDE]
                //Log.d(TAG, result.getStatus().getStatusMessage());
                updateUI(null);
                // [END_EXCLUDE]
            }
        }
    }
    

    Here, result.isSuccess() == false. So I think the Google authentication fails for some reason I cannot understand. I am sure I entered the right password, I also enabled Google Account authentication in my app's Firebase Console.

    Thank you very much in advance if you can help me.

    EDIT : To be more precise, the first time I run the program on my emulator (or after each time I wipe data from it), I have to enter my Google credentials in the dedicated Google login activity that pops up. This works fine and the same activity seems to successfully authenticate me. However after that, result.isSuccess() is still false and I don't understand why.

  • Scrashdown
    Scrashdown over 7 years
    I tried your solution and I am able to get the status message, however printing it in the IDE's terminal using Log.d (the only way that I know of so far) crashes my app. Furthermore, the hasResolution() method returns false.
  • frankelot
    frankelot almost 5 years
    Where do you get this result? All I get back from onActivityResults are INTs onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)
  • Eldhopj
    Eldhopj almost 4 years
    check the data: Intent?