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.