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
}
}
실제 사용하는 이메일을 사용하여 인증메일을 받고 가입하면 끝-!