In this tutorial, we will learn how to build simple google login and registration for android using Firebase Authentication. We have added Email & Password login and Google Account login feature.

Firebase automatically stores user information in the database. Login with google feature is best as you can enter the apps without entering the email and password.

Google Login and registration for Android Using Firebase Authentication

1. Enabling Firebase Auth

1. Go to the android studio and click Tools ⇒ Firebase. Then click on the Authentication tab.

2. Click on the Connect to firebase option.

3. If you are creating a new project then you have to give a new project name otherwise you can select the project you have made.

4. Then you have to select the second option to add firebase authentication to your app. Click on apply changes. This adds plugins and implementation in your Gradle file.

Read More: How to implement Android Splash Screen

2. Enable Authentication Feature

1. Go to the site firebase.google.com.You have to select the authentication tab, then click on sign-in method.

2. Enable both the option Email/password and Google.



3. Creating an Android Project

1. Open Android Studio, go to File ⇒ New Project and fill all the details.

2. Open AndroidManifest.xml file and Internet permission to your app.

<uses-permission android:name="android.permission.INTERNET" />

3. Gradle and plugin will add automatically when you do Step 1.

4. On the Home_Screen.java add the following code. This code will execute when the user will successfully sign in into an application.

package com.androidhire.loginwithfirebase; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import com.google.firebase.auth.FirebaseAuth; public class Home_screen extends AppCompatActivity { FirebaseAuth mAuth; FirebaseAuth.AuthStateListener mAuthListner; @Override protected void onStart() { super.onStart(); mAuth.addAuthStateListener(mAuthListner); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.home_screen_activity); Button button = (Button) findViewById(R.id.signout); mAuth = FirebaseAuth.getInstance(); mAuthListner = new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { if (firebaseAuth.getCurrentUser()==null) { startActivity(new Intent(Home_screen.this, singin_activity.class)); } } }; button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mAuth.signOut(); } }); } }

5. Create a new activity and name that activity signin.java and add the following code to that java file.

import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; 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 singin_activity extends AppCompatActivity { private static final String TAG = ""; private EditText inputEmail, inputPassword; private FirebaseAuth mAuth; private ProgressBar progressBar; SignInButton button; private final static int RC_SIGN_IN = 123; GoogleSignInClient mGoogleSignInClient; FirebaseAuth.AuthStateListener mAuthListner; @Override protected void onStart() { super.onStart(); mAuth.addAuthStateListener(mAuthListner); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mAuth = FirebaseAuth.getInstance(); //check the current user if (mAuth.getCurrentUser() != null) { startActivity(new Intent(singin_activity.this, Home_screen.class)); finish(); } setContentView(R.layout.activity_singin_activity); inputEmail = (EditText) findViewById(R.id.email); inputPassword = (EditText) findViewById(R.id.password); Button ahlogin = (Button) findViewById(R.id.ah_login); progressBar = (ProgressBar) findViewById(R.id.progressBar); TextView btnSignIn = (TextView) findViewById(R.id.sign_in_button); button = (SignInButton) findViewById(R.id.sign_in_google); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { signIn(); } }); btnSignIn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(singin_activity.this, singup_activity.class)); } }); mAuth = FirebaseAuth.getInstance(); // Checking the email id and password is Empty ahlogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String email = inputEmail.getText().toString(); final String password = inputPassword.getText().toString(); if (TextUtils.isEmpty(email)) { Toast.makeText(getApplicationContext(), "Please enter email id", Toast.LENGTH_SHORT).show(); return; } if (TextUtils.isEmpty(password)) { Toast.makeText(getApplicationContext(), "Enter Password", Toast.LENGTH_SHORT).show(); return; } progressBar.setVisibility(View.VISIBLE); //authenticate user mAuth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(singin_activity.this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { progressBar.setVisibility(View.GONE); if (task.isSuccessful()) { // there was an error Log.d(TAG, "signInWithEmail:success"); Intent intent = new Intent(singin_activity.this, Home_screen.class); startActivity(intent); finish(); } else { Log.d(TAG, "singInWithEmail:Fail"); Toast.makeText(singin_activity.this, getString(R.string.failed), Toast.LENGTH_LONG).show(); } } }); } }); mAuthListner = new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { if (firebaseAuth.getCurrentUser() != null) { startActivity(new Intent(singin_activity.this, Home_screen.class)); } } }; GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build(); mGoogleSignInClient = GoogleSignIn.getClient(this, gso); } private void signIn() { Intent signInIntent = mGoogleSignInClient.getSignInIntent(); startActivityForResult(signInIntent, RC_SIGN_IN); } @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) { Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data); try { // Google Sign In was successful, authenticate with Firebase GoogleSignInAccount account = task.getResult(ApiException.class); firebaseAuthWithGoogle(account); } catch (ApiException e) { // Google Sign In failed, update UI appropriately Log.w(TAG, "Google sign in failed", e); // ... } } } private void firebaseAuthWithGoogle(GoogleSignInAccount account) { AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(), null); mAuth.signInWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success"); FirebaseUser user = mAuth.getCurrentUser(); //updateUI(user); } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithCredential:failure", task.getException()); Toast.makeText(singin_activity.this, "Aut Fail", Toast.LENGTH_SHORT).show(); //updateUI(null); } // ... } }); } }

6. Create a new activity call it signup_activity.java. Add the below code to the java file.

import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; public class singup_activity extends AppCompatActivity { private EditText name, email_id, passwordcheck; private FirebaseAuth mAuth; private static final String TAG = ""; private ProgressBar progressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_singup_activity); TextView btnSignUp = (TextView) findViewById(R.id.login_page); btnSignUp.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(singup_activity.this, singin_activity.class); startActivity(intent); } }); mAuth = FirebaseAuth.getInstance(); email_id = (EditText) findViewById(R.id.input_email); progressBar = (ProgressBar) findViewById(R.id.progressBar); passwordcheck = (EditText) findViewById(R.id.input_password); Button ahsignup = (Button) findViewById(R.id.btn_signup); ahsignup.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String email = email_id.getText().toString(); String password = passwordcheck.getText().toString(); if (TextUtils.isEmpty(email)) { Toast.makeText(getApplicationContext(), "Enter Eamil Id", Toast.LENGTH_SHORT).show(); return; } if (TextUtils.isEmpty(password)) { Toast.makeText(getApplicationContext(), "Enter Password", Toast.LENGTH_SHORT).show(); return; } progressBar.setVisibility(View.VISIBLE); mAuth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(singup_activity.this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { progressBar.setVisibility(View.GONE); if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "createUserWithEmail:success"); FirebaseUser user = mAuth.getCurrentUser(); Intent intent = new Intent(singup_activity.this, Home_screen.class); startActivity(intent); finish(); } else { // If sign in fails, display a message to the user. Log.w(TAG, "createUserWithEmail:failure", task.getException()); Toast.makeText(singup_activity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); } } }); } }); } }

7. In the signin_activity.xml add the following code to your file. Through this user can log in to the application using google or email and password.

<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout 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:fitsSystemWindows="true"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" android:padding="24dp" tools:context=".singin_activity"> <ImageView android:layout_width="200dp" android:layout_height="200dp" android:layout_gravity="center" android:contentDescription="@string/image" android:minHeight="0dp" android:minWidth="0dp" android:scaleType="fitCenter" android:src="@drawable/images" /> <EditText android:id="@+id/email" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:hint="@string/email_id" android:inputType="textEmailAddress" android:textColor="@android:color/black" android:textColorHint="@android:color/darker_gray" /> <EditText android:id="@+id/password" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:hint="@string/password" android:inputType="textPassword" android:textColor="@android:color/black" android:textColorHint="@android:color/darker_gray" /> <!-- Login Button --> <Button android:id="@+id/ah_login" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="20dip" android:background="@color/colorAccent" android:text="@string/login" android:textColor="@android:color/black" /> <TextView android:gravity="center" android:id="@+id/sign_in_button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="20dip" android:background="@null" android:text="@string/create_a_new_account" android:textAllCaps="false" android:textSize="15sp" /> <com.google.android.gms.common.SignInButton android:paddingTop="10dp" android:id="@+id/sign_in_google" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <ProgressBar android:id="@+id/progressBar" android:layout_width="20dp" android:layout_height="20dp" android:layout_gravity="center|bottom" android:layout_marginBottom="20dp" android:visibility="gone" /> </android.support.design.widget.CoordinatorLayout> ﻿

8. Add XML code to singup_activity.xml. In this user can create a new account using Email and password. If the email exists then it will not create a new account.

<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:paddingLeft="24dp" android:paddingRight="24dp" android:paddingTop="56dp"> <!-- Email Label --> <EditText android:id="@+id/input_email" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Email" android:inputType="textEmailAddress" /> <!-- Password Label --> <EditText android:id="@+id/input_password" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Password" android:inputType="textPassword" /> <!-- Signup Button --> <Button android:id="@+id/btn_signup" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="24dp" android:layout_marginTop="24dp" android:padding="12dp" android:text="Create Account" /> <TextView android:id="@+id/login_page" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="24dp" android:gravity="center" android:text="Already a member? Login" android:textSize="16dip" /> </LinearLayout> <ProgressBar android:id="@+id/progressBar" android:layout_width="20dp" android:layout_height="20dp" android:layout_gravity="center|bottom" android:layout_marginBottom="20dp" android:visibility="gone" /> </android.support.design.widget.CoordinatorLayout> ﻿

9. In this Homepage.xml layout, I have shown normal text and button for logout.

<?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="24dp" tools:context=".Home_screen"> <TextView android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="wrap_content" android:lineSpacingExtra="8sp" android:text="After Login " android:textSize="36sp" android:textStyle="bold" /> <Button android:id="@+id/signout" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="LogOut" /> </LinearLayout> ﻿

If you are facing any issue in this google login and registration for android using firebase tutorial then you can reach us through the comment, we will try to solve your queries.