Android

[Android] Firebase 이용하여 로그인 구현 with Kotlin

배현진 2022. 6. 12. 21:19

Firebase를 이용하여 간단하게 로그인을 구현해보았다.

다른 방식을 사용할 때보다 확실히 간단하게 구현이 가능했다.

 

우선, Firebase 계정을 만들고, 사용할 프로젝트를 생성하고 만들 앱을 연결해준다.

이 부분은 간단하기도 하고 이전에 Firebase로 OCR 이용하기에서 다룬적이 있기 때문에 설명은 생략한다.

 

생성한 프로젝트로 들어가서 왼쪽 창에서 Authentication을 찾아 클릭한다.

Authentication을 통해서 사용자를 인증하고 관리할 수 있다.

처음 들어가면 '시작하기' 버튼을 눌러 본격적으로 설정해주면 된다.

Sign-in method으로 들어가서 사용할 로그인 방법을 선택해주면 된다.

 

나는 이메일과 비밀번호를 이용한 로그인 방법으로 간단하게 구현해보았다.

 

 

 

더보기

- build.gradle 부분 추가

implementation platform('com.google.firebase:firebase-bom:30.1.0')
implementation 'com.google.android.gms:play-services-auth:19.2.0'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'com.google.firebase:firebase-auth-ktx:21.0.5'

 

- LoginActivity.kt

package com.example.mobileappfinalproject_beatp

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Toast
import com.example.mobileappfinalproject_beatp.databinding.ActivityLoginBinding
import com.example.mobileappfinalproject_beatp.databinding.ActivityMainBinding

class LoginActivity : AppCompatActivity() {

    lateinit var binding:ActivityLoginBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityLoginBinding.inflate(layoutInflater)
        setContentView(binding.root)

        // 회원가입 버튼 클릭시
        binding.goSignInBtn.setOnClickListener {
            val intent = Intent(this, SignInActivity::class.java)
            startActivity(intent)
        }

        // 로그인 버튼 클릭시
        binding.LogInBtn.setOnClickListener {
            val email = binding.LogInEmailEditView.text.toString()
            val password = binding.LogInPasswordEditView.text.toString()
            MyApplication.auth.signInWithEmailAndPassword(email, password)
                .addOnCompleteListener(this) { task ->
                    binding.LogInEmailEditView.text.clear()
                    binding.LogInPasswordEditView.text.clear()
                    if (task.isSuccessful) {
                        if (MyApplication.checkAuth()) {
                            MyApplication.email = email
//                            finish()
                            val intent = Intent(this, HomeActivity::class.java)
                            startActivity(intent)
                        } else {
                            Toast.makeText(baseContext, "이메일 인증을 다시 해주세요", Toast.LENGTH_SHORT).show()
                        }
                    } else {
                        Toast.makeText(baseContext, "로그인 실패", Toast.LENGTH_SHORT).show()
                    }
                }
        }
    }
}

 

- SignInActivity.kt

package com.example.mobileappfinalproject_beatp

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import com.example.mobileappfinalproject_beatp.databinding.ActivitySignInBinding

class SignInActivity : AppCompatActivity() {

    lateinit var binding: ActivitySignInBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivitySignInBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.BackToLogInFromSignIn.setOnClickListener {
            val intent = Intent(this, LoginActivity::class.java)
            startActivity(intent)
        }

        binding.SignInBtn.setOnClickListener {
            val email = binding.SignInEmailEditView.text.toString()
            val password = binding.SignInPasswordEditView.text.toString()

            MyApplication.auth.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(this) { task ->
                    binding.SignInEmailEditView.text.clear()
                    binding.SignInPasswordEditView.text.clear()
                    if (task.isSuccessful) {
                        MyApplication.auth.currentUser?.sendEmailVerification()
                            ?.addOnCompleteListener { sendTask ->
                                if(sendTask.isSuccessful) {
                                    Toast.makeText(baseContext, "회원가입 성공! 메일을 확인해주세요", Toast.LENGTH_SHORT).show()
                                    val intent = Intent(this, LoginActivity::class.java)
                                    startActivity(intent)
                                } else {
                                    Toast.makeText(baseContext, "메일발송 실패", Toast.LENGTH_SHORT).show()
                                }
                            }
                    } else {
                        Toast.makeText(baseContext, "회원가입 실패", Toast.LENGTH_SHORT).show()
                    }
                }
        }
    }
}

 

- MyApplication.kt

class MyApplication: MultiDexApplication() {
    companion object{
        lateinit var auth: FirebaseAuth
        var email:String? = null

        fun checkAuth(): Boolean {
            var currentUser = auth.currentUser
            return currentUser?.let {
                email = currentUser.email
                currentUser.isEmailVerified
            }?: let {
                false
            }
        }
    }

    override fun onCreate() {
        super.onCreate()
        auth = Firebase.auth
    }
}

 

 

실제 사용하는 이메일을 사용하여 인증메일을 받고 가입하면 끝-!