Firebase Authentication in Android Development


Firebase Authentication is a powerful tool for managing user authentication in Android applications. It supports various authentication methods such as email/password, phone authentication, and federated providers like Google, Facebook, and Twitter. This article explains Firebase Authentication and provides Kotlin examples for implementing it in an Android app.

1. Setting Up Firebase Authentication

Step 1: Configure Firebase in Your Project

Go to the Firebase Console, create a project, and register your Android app. Download the google-services.json file and place it in your app's app/ directory.

Step 2: Add Dependencies

Add the Firebase Authentication dependency in your build.gradle file:

    dependencies {
        implementation platform('com.google.firebase:firebase-bom:32.0.0')
        implementation 'com.google.firebase:firebase-auth-ktx'
    }
        

Step 3: Enable Authentication Methods

In the Firebase Console, go to the Authentication section and enable the desired authentication methods (e.g., Email/Password, Google, Phone).

2. Email and Password Authentication

Sign Up

    val auth = FirebaseAuth.getInstance()

    fun signUp(email: String, password: String) {
        auth.createUserWithEmailAndPassword(email, password)
            .addOnCompleteListener { task ->
                if (task.isSuccessful) {
                    val user = auth.currentUser
                    println("Sign-up successful. User email: ${user?.email}")
                } else {
                    println("Sign-up failed: ${task.exception?.message}")
                }
            }
    }
        

Sign In

    fun signIn(email: String, password: String) {
        auth.signInWithEmailAndPassword(email, password)
            .addOnCompleteListener { task ->
                if (task.isSuccessful) {
                    val user = auth.currentUser
                    println("Sign-in successful. User email: ${user?.email}")
                } else {
                    println("Sign-in failed: ${task.exception?.message}")
                }
            }
    }
        

Sign Out

    fun signOut() {
        auth.signOut()
        println("User signed out successfully.")
    }
        

3. Google Sign-In

Integrate Google Sign-In with Firebase Authentication.

Step 1: Configure Google Sign-In

Enable Google Sign-In in the Firebase Console and configure your OAuth client ID.

Step 2: Add Google Sign-In Code

    val googleSignInClient = GoogleSignIn.getClient(this, GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestIdToken(getString(R.string.default_web_client_id))
        .requestEmail()
        .build())

    fun signInWithGoogle() {
        val signInIntent = googleSignInClient.signInIntent
        startActivityForResult(signInIntent, RC_SIGN_IN)
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == RC_SIGN_IN) {
            val task = GoogleSignIn.getSignedInAccountFromIntent(data)
            try {
                val account = task.getResult(ApiException::class.java)!!
                firebaseAuthWithGoogle(account.idToken!!)
            } catch (e: ApiException) {
                println("Google Sign-In failed: ${e.message}")
            }
        }
    }

    fun firebaseAuthWithGoogle(idToken: String) {
        val credential = GoogleAuthProvider.getCredential(idToken, null)
        FirebaseAuth.getInstance().signInWithCredential(credential)
            .addOnCompleteListener { task ->
                if (task.isSuccessful) {
                    println("Google Sign-In successful. User email: ${FirebaseAuth.getInstance().currentUser?.email}")
                } else {
                    println("Google Sign-In failed: ${task.exception?.message}")
                }
            }
    }
        

4. Resetting Password

    fun sendPasswordResetEmail(email: String) {
        auth.sendPasswordResetEmail(email)
            .addOnCompleteListener { task ->
                if (task.isSuccessful) {
                    println("Password reset email sent to $email")
                } else {
                    println("Failed to send password reset email: ${task.exception?.message}")
                }
            }
    }
        

5. Checking Authentication State

    auth.addAuthStateListener { firebaseAuth ->
        val user = firebaseAuth.currentUser
        if (user != null) {
            println("User is signed in: ${user.email}")
        } else {
            println("User is signed out.")
        }
    }
        

Conclusion

Firebase Authentication is a robust solution for managing user authentication in Android applications. By supporting multiple authentication methods and providing seamless integration, it simplifies the development process. Start implementing Firebase Authentication in your apps to enhance user experience and security.





Advertisement