Login and Registration in Android using Firebase in Kotlin - GeeksforGeeks

28 Feb, 2022
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. In this article, we will learn the firebase authentication feature. Using it we can create a Login and Registration page in our app.
Step 1: First, We need to connect our project with Firebase. For that, we need to go to tools the select firebase option
.
Step 2: Now as we need the Firebase authentication feature, In authentication, we have different options. For this article, we will use Authenticate using a custom authentication system. We will click on connect. And add the firebase Authentication SDK to your app.
Step 3: Now we will create an XML layout for the Registration Activity.
XML
<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent">     <LinearLayout        android:id="@+id/linearLayout"        android:layout_width="0dp"        android:layout_height="0dp"        android:orientation="vertical"        android:padding="15dp"        android:paddingTop="40dp"        android:paddingBottom="40dp"        app:layout_constraintBottom_toTopOf="@+id/imageView2"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toTopOf="parent">         <EditText            android:id="@+id/etSEmailAddress"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_marginLeft="15dp"            android:layout_marginTop="30dp"            android:layout_marginRight="15dp"            android:autofillHints="emailAddress"            android:ems="10"            android:hint="@string/email"            android:inputType="textEmailAddress"            android:minHeight="48dp"            android:textColorHint="#757575" />         <EditText            android:id="@+id/etSPassword"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_marginLeft="15dp"            android:layout_marginTop="15dp"            android:layout_marginRight="15dp"            android:autofillHints="password"            android:ems="10"            android:hint="@string/password"            android:inputType="textPassword"            android:minHeight="48dp"            android:textColorHint="#757575" />         <EditText            android:id="@+id/etSConfPassword"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_marginLeft="15dp"            android:layout_marginTop="15dp"            android:layout_marginRight="15dp"            android:autofillHints="password"            android:ems="10"            android:hint="@string/confirm_password"            android:inputType="textPassword"            android:minHeight="48dp"            android:textColorHint="#757575"            tools:ignore="TextContrastCheck" />         <Button            android:id="@+id/btnSSigned"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_margin="15dp"            android:background="@drawable/btn_primary"            android:text="@string/signed" />         <TextView            android:id="@+id/tvRedirectLogin"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:gravity="center_horizontal"            android:layout_margin="10dp"            android:text="@string/already_have_an_account_login"            android:textColor="#18206F"            android:textSize="16sp" />    </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout>
 
 
Step 4: Now we will code for Registration activity
 
In the Registration activity, We will create a FirebaseAuth object, and using it we will call the createUserWithEmailAndPassword(email, pass) function. And check using addOnCompleteListener() function, if the response is successful then will display a Toast.
 
Kotlin
package com.ayush.quizapp.activity.activity import android.content.Intentimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport android.widget.Buttonimport android.widget.EditTextimport android.widget.TextViewimport android.widget.Toastimport com.ayush.quizapp.Rimport com.google.firebase.auth.FirebaseAuthimport com.google.firebase.auth.ktx.authimport com.google.firebase.ktx.Firebase class SignUpActivity : AppCompatActivity() {    lateinit var etEmail: EditText    lateinit var etConfPass: EditText    private lateinit var etPass: EditText    private lateinit var btnSignUp: Button    lateinit var tvRedirectLogin: TextView       // create Firebase authentication object    private lateinit var auth: FirebaseAuth       override fun onCreate(savedInstanceState: Bundle?) {         super.onCreate(savedInstanceState)        setContentView(R.layout.activity_sign_up)                   // View Bindings        etEmail = findViewById(R.id.etSEmailAddress)        etConfPass = findViewById(R.id.etSConfPassword)        etPass = findViewById(R.id.etSPassword)        btnSignUp = findViewById(R.id.btnSSigned)        tvRedirectLogin = findViewById(R.id.tvRedirectLogin)         // Initialising auth object        auth = Firebase.auth           btnSignUp.setOnClickListener {            signUpUser()        }                 // switching from signUp Activity to Login Activity        tvRedirectLogin.setOnClickListener {            val intent = Intent(this, LoginActivity::class.java)            startActivity(intent)        }     }     private fun signUpUser() {        val email = etEmail.text.toString()        val pass = etPass.text.toString()        val confirmPassword = etConfPass.text.toString()                 // check pass        if (email.isBlank() || pass.isBlank() || confirmPassword.isBlank()) {            Toast.makeText(this, "Email and Password can't be blank", Toast.LENGTH_SHORT).show()            return        }         if (pass != confirmPassword) {            Toast.makeText(this, "Password and Confirm Password do not match", Toast.LENGTH_SHORT)                .show()            return        }        // If all credential are correct        // We call createUserWithEmailAndPassword          // using auth object and pass the          // email and pass in it.        auth.createUserWithEmailAndPassword(email, pass).addOnCompleteListener(this) {            if (it.isSuccessful) {                Toast.makeText(this, "Successfully Singed Up", Toast.LENGTH_SHORT).show()                finish()            } else {                Toast.makeText(this, "Singed Up Failed!", Toast.LENGTH_SHORT).show()            }        }    }}
 
 
Step 5:  Now we will design the Login Activity page. Here is the XML code
 
XML
<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".activity.activity.LoginActivity">     <LinearLayout        android:layout_width="0dp"        android:layout_height="0dp"        app:layout_constraintBottom_toTopOf="@+id/imageView3"        android:orientation="vertical"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toTopOf="parent">         <EditText            android:id="@+id/etEmailAddress"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_marginLeft="15dp"            android:layout_marginTop="30dp"            android:layout_marginRight="15dp"            android:autofillHints="emailAddress"            android:ems="10"            android:hint="@string/email"            android:inputType="textEmailAddress"            android:minHeight="48dp"            android:textColorHint="#757575" />         <EditText            android:id="@+id/etPassword"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_marginLeft="15dp"            android:layout_marginTop="15dp"            android:layout_marginRight="15dp"            android:autofillHints="password"            android:ems="10"            android:hint="@string/password"            android:inputType="textPassword"            android:minHeight="48dp"            android:textColorHint="#757575" />         <Button            android:id="@+id/btnLogin"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_margin="15dp"            android:background="@drawable/btn_primary"            android:text="@string/login" />         <TextView            android:id="@+id/tvRedirectSignUp"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_margin="15dp"            android:gravity="center_horizontal"            android:text="@string/don_t_have_an_account_sign_in"            android:textColor="#18206F"            android:textSize="16sp" />     </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout>
 
 
Step 6: Now we will code for login activity
 
In login activity, We will create a FirebaseAuth object, and using it we will call the signInWithEmailAndPassword(email, pass) function. And check using the addOnCompleteListener() function, if the response is successful then will display a toast.
 
Kotlin
package com.ayush.quizapp.activity.activity import android.content.Intentimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport android.widget.Buttonimport android.widget.EditTextimport android.widget.TextViewimport android.widget.Toastimport com.ayush.quizapp.Rimport com.google.firebase.auth.FirebaseAuth class LoginActivity : AppCompatActivity() {     private lateinit var tvRedirectSignUp: TextView    lateinit var etEmail: EditText    private lateinit var etPass: EditText    lateinit var btnLogin: Button       // Creating firebaseAuth object    lateinit var auth: FirebaseAuth     override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_login)                   // View Binding        tvRedirectSignUp = findViewById(R.id.tvRedirectSignUp)        btnLogin = findViewById(R.id.btnLogin)        etEmail = findViewById(R.id.etEmailAddress)        etPass = findViewById(R.id.etPassword)           // initialising Firebase auth object        auth = FirebaseAuth.getInstance()         btnLogin.setOnClickListener {            login()        }         tvRedirectSignUp.setOnClickListener {            val intent = Intent(this, SignUpActivity::class.java)            startActivity(intent)             // using finish() to end the activity            finish()        }    }     private fun login() {        val email = etEmail.text.toString()        val pass = etPass.text.toString()        // calling signInWithEmailAndPassword(email, pass)          // function using Firebase auth object        // On successful response Display a Toast        auth.signInWithEmailAndPassword(email, pass).addOnCompleteListener(this) {            if (it.isSuccessful) {                Toast.makeText(this, "Successfully LoggedIn", Toast.LENGTH_SHORT).show()            } else                Toast.makeText(this, "Log In failed ", Toast.LENGTH_SHORT).show()        }    } }
 
 
Output:
 
 
sweetyty
nikhatkhan11
Firebase
Android
Kotlin
Android
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Flutter - Custom Bottom Navigation Bar
How to Read Data from SQLite Database in Android?
How to Post Data to API using Retrofit in Android?
Android Listview in Java with Example
Retrofit with Kotlin Coroutine in Android
Android UI Layouts
Kotlin Array
Retrofit with Kotlin Coroutine in Android
Kotlin Setters and Getters