|

|  How to Integrate Google Sign-In Authentication in Android Apps

How to Integrate Google Sign-In Authentication in Android Apps

October 31, 2024

Learn to seamlessly integrate Google Sign-In in Android apps with our step-by-step guide, enhancing user experience with secure, fast authentication.

How to Integrate Google Sign-In Authentication in Android Apps

 

Add Google Services JSON

 

  • Download the google-services.json configuration file from the Firebase Console after enabling Google Sign-In. Place this file in the app/ directory of your Android project (your module folder).

 

Update build.gradle Files

 

  • Open the level-specific build.gradle (project level) and ensure you have the Google Services classpath dependency in the build script.
buildscript {
    dependencies {
        // ...
        classpath 'com.google.gms:google-services:4.3.15' // Check for the latest version
    }
}
  • In the build.gradle file at the app level, apply the Google services plugin and include the dependency for Google Play Services Auth.
plugins {
    id 'com.android.application'
    id 'com.google.gms.google-services'
}

dependencies {
    // ...
    implementation 'com.google.android.gms:play-services-auth:20.5.0' // Update to latest version
}

 

Configure GoogleSignInClient

 

  • Inside your MainActivity (or the activity where you're implementing the sign-in), configure the GoogleSignInOptions and create a GoogleSignInClient instance.
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestIdToken(getString(R.string.default_web_client_id))
        .requestEmail()
        .build();

GoogleSignInClient mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

 

Initiate Sign-In Process

 

  • To start the sign-in process, create an intent and start it with startActivityForResult().
private void signIn() {
    Intent signInIntent = mGoogleSignInClient.getSignInIntent();
    startActivityForResult(signInIntent, RC_SIGN_IN);
}

 

Handle Sign-In Result

 

  • Override the onActivityResult method to handle the result from the sign-in intent.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RC_SIGN_IN) {
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        handleSignInResult(task);
    }
}

private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
    try {
        GoogleSignInAccount account = completedTask.getResult(ApiException.class);

        // Signed in successfully, show authenticated UI.
        updateUI(account);
    } catch (ApiException e) {
        // The ApiException status code indicates the detailed failure reason.
        updateUI(null);
    }
}

 

Update UI

 

  • Create a helper function to update the UI based on the user’s sign-in status.
private void updateUI(@Nullable GoogleSignInAccount account) {
    if (account != null) {
        // User is signed in
        // Display user details like name, email, profile picture, etc.
    } else {
        // User is not signed in
        // Update UI accordingly
    }
}

 

Integrate Sign-Out Functionality

 

  • To allow users to sign out, use the signOut method.
private void signOut() {
    mGoogleSignInClient.signOut()
        .addOnCompleteListener(this, task -> updateUI(null));
}

 

Integrate Revoke Access Functionality

 

  • To allow users to revoke access, use the revokeAccess method.
private void revokeAccess() {
    mGoogleSignInClient.revokeAccess()
        .addOnCompleteListener(this, task -> updateUI(null));
}

 

Check for Existing Sign-In

 

  • When the app starts, check if the user is already signed in by accessing the last signed-in account.
@Override
protected void onStart() {
    super.onStart();
    GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
    updateUI(account);
}

 

Handle User Information

 

  • Once signed in, you can access user information from the GoogleSignInAccount object.
// Retrieve information like email, display name, and profile picture.
String displayName = account.getDisplayName();
String email = account.getEmail();
Uri profilePicUri = account.getPhotoUrl();

 

Additional Points to Consider

 

  • Make sure you use the correct client ID from your google-services.json for the token request.
  • Handle different error cases by examining the ApiException status codes appropriately.