Android Google Sign In using Firebase Auth
1. Create a firebase project in Google’s firebase console.
https://console.firebase.google.com/
2. Get the SHA1 by this command line or refer to this link for more info. https://developers.google.com/android/guides/client-auth
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v -storepass android
3. Download the google-services.json file from firebase console and put it into the app directory in your Android project.
4. Add the lines under the comment Add this line in the following to your project-level build.gradle file
buildscript { dependencies { // Add this line classpath 'com.google.gms:google-services:3.1.0' } } allprojects { repositories { jcenter() // And this line maven { url "https://maven.google.com" } } }
5. Add this line at the bottom of the app build.gradle file
apply plugin: 'com.google.gms.google-services'
6. Add these 2 lines in the dependencies tag in the app build.gradle file
compile 'com.google.android.gms:play-services-auth:11.2.0' compile 'com.google.firebase:firebase-auth:11.2.0'
7. On Firebase console page, go to Authentication, then Sign In Method, then select Google and enable it.
8. The MainActivity.java
public class MainActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener { public static final String TAG = "MainActivity"; private String username; private GoogleApiClient mGoogleApiClient; private FirebaseAuth mFirebaseAuth; private FirebaseUser mFirebaseUser; private TextView tvHello; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvHello = findViewById(R.id.tv_hello); mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) .addApi(Auth.GOOGLE_SIGN_IN_API) .build(); // Initialize Firebase Auth mFirebaseAuth = FirebaseAuth.getInstance(); mFirebaseUser = mFirebaseAuth.getCurrentUser(); if (mFirebaseUser == null) { startActivity(new Intent(this, GoogleSignInActivity.class)); finish(); return; } else { username = mFirebaseUser.getDisplayName(); tvHello.setText(String.format("Hello %s", username)); } } public void signOut(View v) { mFirebaseAuth.signOut(); Auth.GoogleSignInApi.signOut(mGoogleApiClient); startActivity(new Intent(this, GoogleSignInActivity.class)); finish(); } @Override public void onConnectionFailed(ConnectionResult connectionResult) { Log.d(TAG, "onConnectionFailed:" + connectionResult); } }
9. The GoogleSignInActivity.java
public class GoogleSignInActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener, View.OnClickListener { private static final String TAG = "SignInActivity"; private static final int RC_SIGN_IN = 9001; private SignInButton mSignInButton; private GoogleApiClient mGoogleApiClient; // Firebase instance variables private FirebaseAuth mFirebaseAuth; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_google_sign_in); mSignInButton = (SignInButton) findViewById(R.id.btn_sign_in); mSignInButton.setOnClickListener(this); // Configure Google Sign In GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build(); mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .build(); // Initialize FirebaseAuth mFirebaseAuth = FirebaseAuth.getInstance(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_sign_in: signIn(); break; default: return; } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_SIGN_IN) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); if (result.isSuccess()) { GoogleSignInAccount account = result.getSignInAccount(); firebaseAuthWithGoogle(account); } else { Log.e(TAG, "Google Sign-In failed."); } } } @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { Log.d(TAG, "onConnectionFailed:" + connectionResult); Toast.makeText(this, "Google Play Services error.", Toast.LENGTH_SHORT).show(); } private void signIn() { Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); startActivityForResult(signInIntent, RC_SIGN_IN); } private void firebaseAuthWithGoogle(GoogleSignInAccount acct) { Log.d(TAG, "firebaseAuthWithGooogle:" + acct.getId()); AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null); mFirebaseAuth.signInWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful()); if (!task.isSuccessful()) { Log.w(TAG, "signInWithCredential", task.getException()); Toast.makeText(GoogleSignInActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); } else { startActivity(new Intent(GoogleSignInActivity.this, MainActivity.class)); finish(); } } }); } }
10. The activity_main.xml
11. The activity_google_sign_in.xml
12. Make sure to register the activity classes in the manifest file
Complete example in Github
Reference:
https://firebase.google.com/docs/auth/android/start/
Search within Codexpedia
Search the entire web