Firebase Authentication Not working in signed APK

15,991

Solution 1

I had the same problem and I fixed the problem using these methods.

  1. Complete app signing on your Play store console using these instructions How to enable Google Play App Signing

  2. Go to your Firebase console Settings > General > Your apps > (Select your project) then add the SHA-1 from App signing certificate from your Play store. You can get SHA-1 by going to Release management -> App signing as show in this image.

enter image description here

Solution 2

You are having fingerprint certificate in console, but its only for debugging purposes, for signed apk you need a production fingerprint certificate, and you can get one by

 c:\Program Files\Java\jdk1.6.25\bin>keytool -list -v -keystore c:\you_key_here.key

Solution 3

Steps to locate the SHA-1 key: 1) Go to your Google Play Console 2) Select the targeting app 3) Go to "App signing" under "Release management" 4) The SHA-1 key can be found under "App Signing Certificate"

It took me many hours to resolve the issue and I hope this can help someone who runs into the same issue.

Solution 4

For Windows:

In Reality:

keytool -list -v -keystore "E:\Google Drive\MeshstocksSyncronize\AndroidKey\BRB\bangaliRussainBusiness.jks"

for Example :

keytool -list -v -keystore "**Here is your path**"

Paste this line in your android studio terminal.

Follow the video for better understanding: https://youtu.be/TYrmT8Emadg

Solution 5

Maybe I am a bit late, but for everyone experiencing the issue and not having found a solution, here is mine:

I have hosted my app on Firebase and enabled Firebase Auth for Email and Password.

The app worked fine in debug mode, but as I signed the app and ran it am my phone, NO API worked. I found out that it was due to my api-key in google-cloud being restricted. I found out that I only used the SHA1 from my debug app, however I needed to add the SHA1 release key as well.

Generating your SHA1 key is fairly simple:

  • Follow this tutorial to genereate a key for your app: Firebase Deployment Tutorial

  • generate your SHA1 from that key using:

    keytool -list -v -keystore {keystore_name} -alias {alias_name}
    

If you get an error that the command "keystore" cannot be found, navigate to your Java Runtime Environment (jre) directory and use the command there. An example path can be found here:

C:\"Program Files"\Android\"Android Studio"\jre\bin
Share:
15,991
coolamz
Author by

coolamz

Updated on June 05, 2022

Comments

  • coolamz
    coolamz about 2 years

    I'm using Firebase Google Sign in. It works perfectly via USB debugging. But when I generate signed APK, it stops working. Its not able to sign in. Using it on Android 5.1 & Android 6.0.1. Also, if the Google play services is not updated, it gives user prompt to update it because of which user may leave the app. How can I turn off the prompt and solve the error?

    public class MainActivity extends AppCompatActivity implements  GoogleApiClient.OnConnectionFailedListener,
            View.OnClickListener {
    private Button skip;
        private static final String TAG = "GoogleActivity";
        private static final int RC_SIGN_IN = 9001;
        private ProgressBar pb;
        // [START declare_auth]
        private FirebaseAuth mAuth;
        // [END declare_auth]
    
        // [START declare_auth_listener]
        private FirebaseAuth.AuthStateListener mAuthListener;
        // [END declare_auth_listener]
    
        private GoogleApiClient mGoogleApiClient;
        private TextView mStatusTextView;
        private TextView mDetailTextView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            pb=(ProgressBar)findViewById(R.id.signpro);
            pb.setVisibility(View.GONE);
            skip=(Button)findViewById(R.id.btnskip);
            skip.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    setContentView(R.layout.activity_home);
                }
            });
            // Views
    
    
            // Button listeners
            findViewById(R.id.sign_in_button).setOnClickListener(this);
    
            // [START config_signin]
            // Configure Google Sign In
            GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestIdToken(getString(R.string.default_web_client_id))
                    .requestEmail()
                    .build();
            // [END config_signin]
    
            mGoogleApiClient = new GoogleApiClient.Builder(this)
                    .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
                    .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                    .build();
    
            // [START initialize_auth]
            mAuth = FirebaseAuth.getInstance();
            // [END initialize_auth]
    
            // [START auth_state_listener]
            mAuthListener = new FirebaseAuth.AuthStateListener() {
                @Override
                public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
    
                    FirebaseUser user = firebaseAuth.getCurrentUser();
                    if (user != null) {
                        // User is signed in
                        Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
                        setContentView(R.layout.activity_home);
    
                    } else {
                        // User is signed out
                        Log.d(TAG, "onAuthStateChanged:signed_out");
                    }
                    // [START_EXCLUDE]
    
                    // [END_EXCLUDE]
                }
            };
            // [END auth_state_listener]
        }
    
        // [START on_start_add_listener]
        @Override
        public void onStart() {
            super.onStart();
            mAuth.addAuthStateListener(mAuthListener);
    
        }
        // [END on_start_add_listener]
    
        // [START on_stop_remove_listener]
        @Override
        public void onStop() {
            super.onStop();
            if (mAuthListener != null) {
                mAuth.removeAuthStateListener(mAuthListener);
            }
        }
        // [END on_stop_remove_listener]
    
        // [START onactivityresult]
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            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()) {
                    Toast.makeText(this, "Signing you in. Please Wait...", Toast.LENGTH_LONG).show();
                    // Google Sign In was successful, authenticate with Firebase
                    GoogleSignInAccount account = result.getSignInAccount();
                    firebaseAuthWithGoogle(account);
                    Toast.makeText(this, "Sign In Successful!", Toast.LENGTH_SHORT).show();
                } else {
                    // Google Sign In failed, update UI appropriately
                    // [START_EXCLUDE]
    
                    Toast.makeText(this, "Google Sign In failed. Please Skip.", Toast.LENGTH_SHORT).show();
                    pb.setVisibility(View.GONE);
                    // [END_EXCLUDE]
                }
            }
        }
        // [END onactivityresult]
    
        // [START auth_with_google]
        private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
            Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId());
            // [START_EXCLUDE silent]
    
            // [END_EXCLUDE]
    
            AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
            mAuth.signInWithCredential(credential)
                    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful());
    
                            // If sign in fails, display a message to the user. If sign in succeeds
                            // the auth state listener will be notified and logic to handle the
                            // signed in user can be handled in the listener.
                            if (!task.isSuccessful()) {
                                Log.w(TAG, "signInWithCredential", task.getException());
                                Toast.makeText(MainActivity.this, "Authentication failed.",
                                        Toast.LENGTH_SHORT).show();
                            }
                            // [START_EXCLUDE]
    
                            // [END_EXCLUDE]
                        }
                    });
        }
        // [END auth_with_google]
    
        // [START signin]
        private void signIn() {
            pb.setVisibility(View.VISIBLE);
            Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
            startActivityForResult(signInIntent, RC_SIGN_IN);
        }
        // [END signin]
    
    
    
        @Override
        public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
            // An unresolvable error has occurred and Google APIs (including Sign-In) will not
            // be available.
            Log.d(TAG, "onConnectionFailed:" + connectionResult);
            Toast.makeText(this, "Google Play Services error.", Toast.LENGTH_SHORT).show();
        }
    
        @Override
        public void onClick(View v) {
            int i = v.getId();
            if (i == R.id.sign_in_button) {
                signIn();
    
            }
        }
    }
    
  • Faisal
    Faisal almost 5 years
    Took me hours to resolve the issue. This should be included in the firebase "Authenticate Using Google Sign-In on Android" instructions .
  • LOG_TAG
    LOG_TAG about 4 years
    What is the difference between keytool -list -v -keystore and above thing?
  • notmystyle
    notmystyle over 3 years
    This was it for me also. This hash is different than the SHA-1 you get from your own keystore. This SHA-1 needs to be added to your firebase app's allowed fingerprints along with your others so you'll have at least 3 (debug, release, google's). Google's description of this signing cert is "This is the public certificate for the app signing key that Google uses to sign each of your releases. Use it to register your key with API providers. The app signing key itself is not accessible, and is kept on a secure Google server."