Skip to main content

Command Palette

Search for a command to run...

Zero to one. Building my first App using firebase in Kotlin.

Updated
7 min read
Zero to one.
 Building my first App
 using firebase in Kotlin.
R

I’m Ronan Angira, an enthusiastic Automation & AI Engineer with a strong passion for developing intelligent, data-driven solutions. With expertise in AI, IoT, embedded systems, and automation, I specialize in creating innovative technologies that solve real-world challenges and boost system efficiency. My mission is to leverage cutting-edge tools like machine learning and IoT to drive efficiency, simplify complex processes, and create smarter, more sustainable systems.

Successfully building your first app is one of the best feelings a software developer can ever have. I purpose to share the journey of how I made a login app using Firebase in Kotlin.

200w (1).webp

Introduction.

What is Firebase?

Firebase is a backend-as-a-service that gives developers a variety of tools and services to help them make high-quality apps, and grow their user base.

It's built on Google's infrastructure. Firebase enables a programmer to include user authentication such as sign-in using passwords, phone numbers, Google, Facebook, Twitter, and more.

The Firebase Authentication (SDK) can be used to manually add one or more sign-in methods into an app.

Building a login app.

To build a login app, one would require Firebase tools to set up the authentication of the user. Fortunately, this article provides a detailed step-by-step process for achieving this successfully.

mind-blown-explosion.gif

Connecting the project with Firebase.

For the app's authentication, I included the basic user sign-in with an email address. Below are the steps to connect your project with firebase:

Create a new project in Android Studio.

new-project-wizard-choose_2x.png

**Tip **: Android Studio has to be of the latest version. ie)equal or above the 2.2 version.

Click to download the latest Android Version

Configure the project created.

** Step 1)**

Indicate the **Name ** of your project.

** Step 2)**

The **Package Name ** will, by default be created by android studio from the **Name ** of your project.

** Step 3)**

On the Save location tab, choose where to** save** the project on your PC.

** Step 4)**

Choose your preferred language of code. For the app, we will be using Kotlin.

** Step 5)**

Specify the **Minimum API level ** to be supported by your app. I recommend a higher percentage API level ie) API 21: Android 5.0 (Lollipop)

** Step 6)**

Click on Finish to complete the setup of the project.

new-project-wizard-configure-2x.png

Adding Firebase to your project.

Step 1 )

On the **Tools bar ** in Android studio, click on Firebase on the drop-down menu.

Untitled-82.png

Step 2 )

On the Firebase assistant menu, (located on the right side if the screen), click on the Authentication option.

Screenshot (49).png

Step 3 )

Select the ** Authenticate using a custom authentication system [KOTLIN]** option.

fb01.png

Step 4 )

Once your app has been successfully connected with Firebase, click on the **Add the Firebase authentication SDK to your app ** option.

fb02.png

The Dependencies.

Project level build .gradle file.

After following the steps correctly, your project-level file will have the Firebase dependencies included in the code:

buildscript {
    repositories {
        google()
        mavenCentral()

    }
    dependencies {
        classpath "com.android.tools.build:gradle:7.0.4"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.21"
        classpath 'com.google.gms:google-services:4.3.13'

    }
}

task clean(type: Delete) {
    delete rootProject.buildDir

App-level build .gradle file.

On the app-level build.gradle file, add the following code:

  }
    buildFeatures{
        viewBinding= true
    }

Your app-level file will have the Firebase dependencies and plugins included in the file:

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'com.google.gms.google-services'
}

android {
    compileSdk 33

    defaultConfig {
        applicationId "com.example.first_app"
        minSdk 21
        targetSdk 33
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
    buildFeatures{
        viewBinding= true
    }

}

dependencies {

    implementation 'androidx.core:core-ktx:1.9.0'
    implementation 'androidx.appcompat:appcompat:1.4.2'
    implementation 'com.google.android.material:material:1.6.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    implementation 'com.android.support:support-annotations:28.0.0'
    implementation 'com.android.support:support-v4:28.0.0'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
    implementation platform('com.google.firebase:firebase-bom:30.2.0')
    implementation 'com.google.firebase:firebase-analytics-ktx'
}

Layouts for the App.

Use the activity_main.xml file as the **Login layout ** for the app.

For the Sign up layout , create a new xml layout by following these steps:

Step 1 )

On the android app icon, right-click on the layout folder.

Step 2 )

Move your cursor to new activity then select the ** Gallery ** option.

Screenshot (50).png

Step 3 )

Select Empty Activity ** and click on ** Next.

Screenshot (51).png

Step 4 )

Indicate the Activity Name for the signup layout. In this case, we have used Sign_up.

Screenshot (52).png

Creating the XML layout for the Registration Activity.

You can customize your layout to your specification.

One can use the following code:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="@drawable/bgcolor"

        tools:context=".MainActivity">


   <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Sign Up "
            android:id="@+id/signup"
             android:textColor="@color/white"
            android:textSize="30sp"
            android:textStyle="bold"
            android:layout_margin="30dp"
            android:gravity="center"
            android:backgroundTint="@color/bgcolor2"

            tools:ignore="HardcodedText"/>
    <EditText

            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/username"
            android:hint="Username"
            android:textColorHint="@color/white"
            android:textColor="@color/white"
            android:layout_margin="10dp"
            android:padding="20dp"
            android:background="@color/edit_txtbg"
            android:drawableStart="@drawable/ic_baseline_person_24"
            tools:ignore="HardcodedText"/>
    <EditText


            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/password"
            android:inputType="textPassword"
            android:hint="Password"
            android:textColorHint="@color/white"
            android:textColor="@color/white"
            android:layout_margin="10dp"
            android:padding="20dp"
            android:background="@color/edit_txtbg"
            android:drawableStart="@drawable/ic_baseline_info_24"
            tools:ignore="HardcodedText"/>

 <EditText


            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/confpassword"
            android:inputType="textPassword"
            android:hint="Confirm Password"
            android:textColorHint="@color/white"
            android:textColor="@color/white"
            android:layout_margin="10dp"
            android:padding="20dp"
            android:background="@color/edit_txtbg"
            android:drawableStart="@drawable/ic_baseline_info_24"
            tools:ignore="HardcodedText"/>

        <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>

Creating the XML layout for the Login activity.

You can design your layout to your specifications. The code for the log-in activity is as follows:

<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="@drawable/bgcolor"

        tools:context=".MainActivity">

<Button

            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/login"
            android:text="LOGIN"
            android:layout_gravity="center"
            android:layout_margin="20dp"
            android:textSize="20sp"
            android:backgroundTint="@color/bgcolor"/>
 <EditText

            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/username"
            android:hint="Username"
            android:textColorHint="@color/white"
            android:textColor="@color/white"
            android:layout_margin="10dp"
            android:padding="20dp"
            android:background="@color/edit_txtbg"
            android:drawableStart="@drawable/ic_baseline_person_24"
            tools:ignore="HardcodedText"/>
    <EditText


            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/password"
            android:inputType="textPassword"
            android:hint="Password"
            android:textColorHint="@color/white"
            android:textColor="@color/white"
            android:layout_margin="10dp"
            android:padding="20dp"
            android:background="@color/edit_txtbg"
            android:drawableStart="@drawable/ic_baseline_info_24"
            tools:ignore="HardcodedText"/>
  <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>

Creating code for the Registration Activity.

Here is the code that will enable the user to **Sign up ** for the app.

package com.example.first_app

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
import com.example.first_app
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase

class SignUpActivity : AppCompatActivity() {
    lateinit var Email: EditText
    lateinit var ConfPass: EditText
    private lateinit var Pass: 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
        Email = findViewById(R.id.username)
        ConfPass = findViewById(R.id.confpassword)
        Pass = findViewById(R.id.password)
        btnSignUp = findViewById(R.id.signup)
        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 = Email.text.toString()
        val pass = Pass.text.toString()
        val confirmPassword = ConfPass.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
        .
        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()
            }
        }
    }
}

Creating code for the Login activity.

Here is the code that will enable the user to **Login ** after signing up for the app:

package com.example.first_app
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
import com.example.first_ap
import com.google.firebase.auth.FirebaseAuth

class LoginActivity : AppCompatActivity() {

    private lateinit var tvRedirectSignUp: TextView
    lateinit var Email: EditText
    private lateinit var Pass: 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.login)
        Email = findViewById(R.id.username)
        Pass = findViewById(R.id.password)

          //initializing 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 = Email.text.toString()
        val pass = Pass.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()
        }
    }

}

Bonus

For a better choice of colors to use in the XML layout, you can follow these steps:

** Step 1 )**

Go to Coolors.co

** Step 2 )**

Click on Explore trending palettes to find the color of your choice.

Screenshot (55).png

** Step 3 )**

Click on the ** Hex value ** to pick the color of your choice.

Screenshot (57).png

** Step 4 )**

Click on the res/values/colors.xml to access the colors.xml file in your android app project.

Screenshot (58).png

** Step 5 )**

Using the following code, **name ** and paste the **hex value ** of your color:

<color name="color">#hexvalue</color>

**Step 6 ) **

Access the color in the XML layout file by its ** name **. ie)

android:backgroundTint="@color/bgcolor2"

I hope this article helps. Happy coding!!

giphy (1).gif

M

Great work

C
CHRIS3y ago

Nice if you to share.

1
F

Wonderful work😁

F

Marvelous work😃

1
M

Absolutely wonderful 🤩.Its nice of you to share such content.

1
N

Great work

1