Google Signing using Firebase Authentication in Android
Last Updated :
20 Aug, 2024
Firebase is a mobile and web application development platform. It provides services that a web application or mobile application might require. Firebase provides email and password authentication without any overhead of building the backend for user authentication. Google Sign-In is a secure way to authenticate users in your apps. It reduces the hassle of dealing with and handling those extra passwords by the user to get authenticated into the app. Firebase offers a great number of options to implement Login in your app like Email, Phone number, Google, Facebook, etc.
What We Are Going to Build in this Article?
Here is a sample video of what we are going to build in this article. We will be implementing this application in both Java and Kotlin Programming Languages for Android.
Step By Step Implementation
Step 1: Create a New Project in Android Studio
To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio. The code for that has been given in both Java and Kotlin Programming Language for Android.
Step 2: Connecting Firebase with the Application
- Navigate to the Website.
- Go to the Console.
- Add Project.

Name your project and click on continue and Connect your firebase to your google account.

After completion of the project, the following interface will appear.

Now enter the package name and the name of your application. To enter the SHA-1 value follow the steps:
Go to Gradle > Task > android > signing report

After opening the signing report you will get the value of SHA-1 as shown below. Copy it and use it in firebase.

After completing the above step download the google-services.json config file provided there and paste it into android studio.
Navigate to project > app > src and paste it

Go to authentication.

Go to Sign-in-method and enable google sign-in.

Step 3: Adding Required Dependencies & Plugins
Navigate to Gradle Scripts > build.gradle(project) and add the following dependency to it:
classpath 'com.google.gms:google-services:4.3.10'
Navigate to Gradle Scripts > build.gradle(module) and add the following plugin to it:
apply plugin: 'com.google.gms.google-services'
Navigate to Gradle Scripts > build.gradle(module) and add the following dependencies in it:
implementation 'com.google.firebase:firebase-auth:21.0.1'
implementation 'androidx.credentials:credentials:1.0.0'
implementation 'com.google.android.gms:play-services-auth:18.1.0'
implementation 'com.github.bumptech.glide:glide:4.11.0'
Step 4: Adding Internet Permission
Go to the AndroidManifest.xml file and add the following piece of code to it-
<uses-permission android:name="android.permission.INTERNET"/>
Step 5: Working with XML Files
Navigate to the app > res > layout > activity_main.xml and add the below code to that file. Below is the code for the activity_main.xml file.
XML
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.google.android.gms.common.SignInButton
android:id="@+id/bt_sign_in"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp" />
</RelativeLayout>
Navigate to app > right-click > new > activity > empty activity and name it as ProfileActivity. Use the following code in the activity_profile.xml file.
XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:padding="16dp"
tools:context=".ProfileActivity">
<ImageView
android:id="@+id/iv_image"
android:layout_width="150dp"
android:layout_height="150dp" />
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/design_default_color_primary"
android:textSize="24sp"
android:textStyle="bold" />
<Button
android:id="@+id/bt_logout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:text="Logout" />
</LinearLayout>
Step 6: Working with MainActivity File
Go to the MainActivity file and refer to the following code. Below is the code for the MainActivity.java file. Comments are added inside the code to understand the code in more detail.
Java
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInClient;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.common.api.ApiException;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthCredential;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.GoogleAuthProvider;
public class MainActivity extends AppCompatActivity {
// Initialize variables
SignInButton btSignIn;
GoogleSignInClient googleSignInClient;
FirebaseAuth firebaseAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Assign variable
btSignIn = findViewById(R.id.bt_sign_in);
// Initialize sign in options the client-id is copied form google-services.json file
GoogleSignInOptions googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken("438431947620-ecpi41uk3dhhf4mv8g8q993k3vs49ltm.apps.googleusercontent.com")
.requestEmail()
.build();
// Initialize sign in client
googleSignInClient = GoogleSignIn.getClient(MainActivity.this, googleSignInOptions);
btSignIn.setOnClickListener((View.OnClickListener) view -> {
// Initialize sign in intent
Intent intent = googleSignInClient.getSignInIntent();
// Start activity for result
startActivityForResult(intent, 100);
});
// Initialize firebase auth
firebaseAuth = FirebaseAuth.getInstance();
// Initialize firebase user
FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
// Check condition
if (firebaseUser != null) {
// When user already sign in redirect to profile activity
startActivity(new Intent(MainActivity.this, ProfileActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Check condition
if (requestCode == 100) {
// When request code is equal to 100 initialize task
Task<GoogleSignInAccount> signInAccountTask = GoogleSignIn.getSignedInAccountFromIntent(data);
// check condition
if (signInAccountTask.isSuccessful()) {
// When google sign in successful initialize string
String s = "Google sign in successful";
// Display Toast
displayToast(s);
// Initialize sign in account
try {
// Initialize sign in account
GoogleSignInAccount googleSignInAccount = signInAccountTask.getResult(ApiException.class);
// Check condition
if (googleSignInAccount != null) {
// When sign in account is not equal to null initialize auth credential
AuthCredential authCredential = GoogleAuthProvider.getCredential(googleSignInAccount.getIdToken(), null);
// Check credential
firebaseAuth.signInWithCredential(authCredential).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
// Check condition
if (task.isSuccessful()) {
// When task is successful redirect to profile activity display Toast
startActivity(new Intent(MainActivity.this, ProfileActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
displayToast("Firebase authentication successful");
} else {
// When task is unsuccessful display Toast
displayToast("Authentication Failed :" + task.getException().getMessage());
}
}
});
}
} catch (ApiException e) {
e.printStackTrace();
}
}
}
}
private void displayToast(String s) {
Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
}
}
Kotlin
import android.content.Intent
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.google.android.gms.auth.api.signin.GoogleSignIn
import com.google.android.gms.auth.api.signin.GoogleSignInAccount
import com.google.android.gms.auth.api.signin.GoogleSignInClient
import com.google.android.gms.auth.api.signin.GoogleSignInOptions
import com.google.android.gms.common.SignInButton
import com.google.android.gms.common.api.ApiException
import com.google.android.gms.tasks.Task
import com.google.firebase.auth.AuthCredential
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.FirebaseUser
import com.google.firebase.auth.GoogleAuthProvider
class MainActivity : AppCompatActivity() {
// Initialize variables
lateinit var btSignIn: SignInButton
lateinit var googleSignInClient: GoogleSignInClient
private lateinit var firebaseAuth: FirebaseAuth
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Assign variable
btSignIn = findViewById(R.id.bt_sign_in)
// Initialize sign in options the client-id is copied form google-services.json file
val googleSignInOptions = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken("438431947620-ecpi41uk3dhhf4mv8g8q993k3vs49ltm.apps.googleusercontent.com")
.requestEmail()
.build()
// Initialize sign in client
googleSignInClient = GoogleSignIn.getClient(this@MainActivity, googleSignInOptions)
btSignIn.setOnClickListener { // Initialize sign in intent
val intent: Intent = googleSignInClient.signInIntent
// Start activity for result
startActivityForResult(intent, 100)
}
// Initialize firebase auth
firebaseAuth = FirebaseAuth.getInstance()
// Initialize firebase user
val firebaseUser: FirebaseUser? = firebaseAuth.currentUser
// Check condition
if (firebaseUser != null) {
// When user already sign in redirect to profile activity
startActivity(
Intent(
this@MainActivity,
ProfileActivity::class.java
).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
)
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
// Check condition
if (requestCode == 100) {
// When request code is equal to 100 initialize task
val signInAccountTask: Task<GoogleSignInAccount> =
GoogleSignIn.getSignedInAccountFromIntent(data)
// check condition
if (signInAccountTask.isSuccessful) {
// When google sign in successful initialize string
val s = "Google sign in successful"
// Display Toast
displayToast(s)
// Initialize sign in account
try {
// Initialize sign in account
val googleSignInAccount = signInAccountTask.getResult(ApiException::class.java)
// Check condition
if (googleSignInAccount != null) {
// When sign in account is not equal to null initialize auth credential
val authCredential: AuthCredential = GoogleAuthProvider.getCredential(
googleSignInAccount.idToken, null
)
// Check credential
firebaseAuth.signInWithCredential(authCredential)
.addOnCompleteListener(this) { task ->
// Check condition
if (task.isSuccessful) {
// When task is successful redirect to profile activity
startActivity(
Intent(
this@MainActivity,
ProfileActivity::class.java
).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
)
// Display Toast
displayToast("Firebase authentication successful")
} else {
// When task is unsuccessful display Toast
displayToast(
"Authentication Failed :" + task.exception.message
)
}
}
}
} catch (e: ApiException) {
e.printStackTrace()
}
}
}
}
private fun displayToast(s: String) {
Toast.makeText(applicationContext, s, Toast.LENGTH_SHORT).show()
}
}
Go to the ProfileActivity file and use the following code in it:
Java
import android.os.Bundle;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import com.bumptech.glide.Glide;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import androidx.credentials.CredentialManager;
import androidx.credentials.SignOutRequest;
public class ProfileActivity extends AppCompatActivity {
// Initialize variables
private ImageView ivImage;
private TextView tvName;
private Button btLogout;
private FirebaseAuth firebaseAuth;
private CredentialManager credentialManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
// Assign variables
ivImage = findViewById(R.id.iv_image);
tvName = findViewById(R.id.tv_name);
btLogout = findViewById(R.id.bt_logout);
// Initialize Firebase Auth
firebaseAuth = FirebaseAuth.getInstance();
// Initialize Firebase user
FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
// Check condition
if (firebaseUser != null) {
// When Firebase user is not null, set image and name
Glide.with(this).load(firebaseUser.getPhotoUrl()).into(ivImage);
tvName.setText(firebaseUser.getDisplayName());
}
// Initialize Credential Manager
credentialManager = CredentialManager.create(this);
btLogout.setOnClickListener(view -> {
// Sign out using Credential Manager
SignOutRequest signOutRequest = new SignOutRequest.Builder().build();
credentialManager.signOut(signOutRequest)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
// Sign out from Firebase
firebaseAuth.signOut();
// Display Toast
Toast.makeText(getApplicationContext(), "Logout successful", Toast.LENGTH_SHORT).show();
// Finish activity
finish();
} else {
// Handle failure
Toast.makeText(getApplicationContext(), "Logout failed", Toast.LENGTH_SHORT).show();
}
}
});
});
}
}
Kotlin
import android.os.Bundle
import android.widget.Button
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.bumptech.glide.Glide
import com.google.firebase.auth.FirebaseAuth
import androidx.credentials.CredentialManager
import androidx.credentials.SignOutRequest
class ProfileActivity : AppCompatActivity() {
// Initialize variables
private lateinit var ivImage: ImageView
private lateinit var tvName: TextView
private lateinit var btLogout: Button
private lateinit var firebaseAuth: FirebaseAuth
private lateinit var credentialManager: CredentialManager
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_profile)
// Assign variables
ivImage = findViewById(R.id.iv_image)
tvName = findViewById(R.id.tv_name)
btLogout = findViewById(R.id.bt_logout)
// Initialize Firebase Auth
firebaseAuth = FirebaseAuth.getInstance()
// Initialize Firebase user
val firebaseUser = firebaseAuth.currentUser
// Check condition
if (firebaseUser != null) {
// When Firebase user is not null, set image on image view
Glide.with(this@ProfileActivity).load(firebaseUser.photoUrl).into(ivImage)
// Set name on text view
tvName.text = firebaseUser.displayName
}
// Initialize Credential Manager
credentialManager = CredentialManager(this)
btLogout.setOnClickListener {
// Sign out using Credential Manager
val signOutRequest = SignOutRequest.Builder().build()
credentialManager.signOut(signOutRequest).addOnCompleteListener { task ->
// Check condition
if (task.isSuccessful) {
// When task is successful, sign out from Firebase
firebaseAuth.signOut()
// Display Toast
Toast.makeText(applicationContext, "Logout successful", Toast.LENGTH_SHORT).show()
// Finish activity
finish()
} else {
// Handle failure
Toast.makeText(applicationContext, "Logout failed", Toast.LENGTH_SHORT).show()
}
}
}
}
}
Output:
Also, you can see that inside Firebase data of users is being stored:

Similar Reads
Google Signing using Firebase Authentication in Kotlin
Firebase is a mobile and web application development platform. It provides services that a web application or mobile application might require. Firebase provides email and password authentication without any overhead of building the backend for user authentication. Google Sign-In is a secure way to
5 min read
User authentication using Firebase in Android
Firebase is a platform that helps developers build mobile and web apps. It provides useful tools like databases, cloud storage, and hosting. One of its main features is email and password login, so developers donât have to create their own system for user authentication. This makes app development e
7 min read
Google SignIn using Firebase Authentication in ReactJS
Firebase simplifies mobile and web app development by offering pre-built features like user authentication (email/password, Google Sign-In, etc.) without the need to build complex backends. This saves time and resources for developers.In this article, we will discuss about the Google Sign-In feature
5 min read
Authentication Using Fingerprint in Android
Fingerprint authentication came with Android 6.0 (Marshmallow), with the newly released APIs allowing users to authenticate their smartphones with fingerprint sensors. In order to authenticate users using fingerprint sensors we need the instance of FingerprintManager class and call the authenticate(
6 min read
How to use Firebase UI Authentication Library in Android?
Firebase UI is a library provided by Firebase for Android apps which makes or so many tasks easy while integrating Firebase in Android. This library provides so many extra features that we can integrate into our Android very easily. In this article, we will take a look at using this library for addi
10 min read
How to Remove Firebase Authentication in Android Studio?
Android Studio is the official IDE (Integrated Development Environment) for Android app development and it is based on JetBrainsâ IntelliJ IDEA software. Android Studio provides many excellent features that enhance productivity when building Android apps, such as: A blended environment where one can
2 min read
Android Jetpack Compose - Phone Authentication using Firebase
Many apps require their users to be authenticated. So for the purpose of authenticating the apps uses phone number authentication inside their apps. In phone, authentication user has to verify his identity with his phone number. Inside the app user has to enter his phone number after that he will re
11 min read
Anonymous authentication in firebase using React JS
This method explains how to sign in without revealing your identity using Firebase in a React app. It's like having a secret entry you create and use temporary anonymous accounts for logging in. We make it happen by using the special tools provided by Firebase.Prerequisites:React JSFirebaseApproach
3 min read
Google Authentication with Firebase
Google Authentication, a method of verifying user identities using Google credentials, provides a seamless and secure way for users to sign in to applications. With the help of Firebase, developers can integrate Google Authentication into their apps and allowing users to sign in with their existing
5 min read
Firebase Authentication with Phone Number OTP in Android
Many apps require their users to be authenticated. So for the purpose of authenticating the apps uses phone number authentication inside their apps. In phone authentication, the user has to verify his identity with his phone number. Inside the app user has to enter his phone number after that he wil
8 min read