최종 결과물이 아닌 본 게시글에서 공부했던 것의 결과물임.
# 결과물 미리보기
아마 안드로이드의 가장 기초면서 가장 많이쓰이는 기술이 아닐까 싶다. 파이어베이스 Authentication을 이용하여 email로그인 회원가입 기능을 구현하는 것인데, 다른 소셜 로그인도 지원을 하기 때문에 로그인 단계를 편리하게 사용할 수 있다.
메인액티비와 로그인액티비티 두개를 분리했고, 메인액티비티의 onStart를 override하여 현재 로그인된 정보가 없으면 로그인 페이지로 이동 시키고, 그렇지 않다면 머물게 했다. 로그아웃 버튼을 누르면 현재 계정정보가 로그아웃 되고 로그인 액티비티로 넘어간다.
# 파이어 베이스에 앱 연결하기
## SDK 추가하기
파이어 베이스에서 프로젝트를 생성하고, 앱을 연동시킨다. 전에도 포스팅한 적 있기 때문에 이 내용은 생략한다. BumbleBee이상버전의 안드로이드 스튜디오를 사용하고 있으면 build.gradle을 추가시키는 것을 조금 다르게 해야하는데, 내가 저번에 포스팅한 글을 올려놓겠다. 아래 게시글에서 ##범블비에서 Firebase SDK 추가라고 적어놨던 항목을 참고하면 좋을거 같다.
## auth 사용을 위해 추가해야 할 dependencies
implementation 'com.google.firebase:firebase-auth-ktx'
# 파이어베이스 Authentication사용하기
// 전역으로 사용할 FirebaseAuth를 만들어 준다
private lateinit var auth : FirebaseAuth
// 같은 기능이다
auth = Firebase.auth // Kotiln스러운 코드
auth = FirebaseAuth.getInstance() // JAVA스러운 코드
저번 dataclass를 사용하면서 느낀거와 같이 코틀린은 getter와 setter를 자바와 같은맥락에서 사용하지만 코틀린이 알아서 만들어 줬다. 그렇기 때문에 get이라는 키워드 자체를 사용하지 않았는데, 그런게 코틀린 스러운 코드인거 같다.
## 로그인 구현하기
파이어베이스가 알아서 해주기때문에 복잡하지도 어렵지도 않다. 함수만 잘 호출해 사용하면 된다.
private fun initSignupButton() {
binding.signupButton.setOnClickListener {
val email = binding.emailEditText.text.toString()
val password = binding.passwordEditText.text.toString()
auth.createUserWithEmailAndPassword(email,password)
.addOnCompleteListener { task ->
if(task.isSuccessful){
Toast.makeText(this,"회원가입에 성공했습니다!",Toast.LENGTH_SHORT).show()
}else{
Toast.makeText(this,"이미 존재하는 계정이거나, 회원가입에 실패했습니다.",Toast.LENGTH_SHORT).show()
}
}
}
}
## 회원가입 구현하기
회원가입 또한 마찬가지이다.
private fun initLoginButton() {
binding.loginButton.setOnClickListener {
val email = binding.emailEditText.text.toString()
val password = binding.passwordEditText.text.toString()
auth.signInWithEmailAndPassword(email,password)
.addOnCompleteListener { task ->
if(task.isSuccessful) {
Toast.makeText(this,"로그인에 성공했습니다!",Toast.LENGTH_SHORT).show()
// 액티비티 종료
finish()
}else {
Toast.makeText(this,"아이디와 비밀번호를 확인해주세요.",Toast.LENGTH_SHORT).show()
}
}
}
}
# 번외 기능
로그인 회원가입시 email,password EditText의 값이 넘어가게 되는데 만약 빈값이 있으면 어떻게 될까를 생각해보자. 이러한 경우를 방지하기 위해 addTextChangedListnener를 통해 값이 비어있을 경우에는 버튼클릭 자체를 막는 기능을 구현했다.
private fun detectEmailAndPasswordEmpty() {
// when Activity Start
binding.loginButton.isEnabled = false
binding.signupButton.isEnabled = false
binding.emailEditText.addTextChangedListener {
val email = binding.emailEditText.text.toString()
val password = binding.passwordEditText.text.toString()
var enalbed = email.isNotEmpty() && password.isNotEmpty()
binding.loginButton.isEnabled = enalbed
binding.signupButton.isEnabled = enalbed
}
binding.passwordEditText.addTextChangedListener {
val email = binding.emailEditText.text.toString()
val password = binding.passwordEditText.text.toString()
var enalbed = email.isNotEmpty() && password.isNotEmpty()
binding.loginButton.isEnabled = enalbed
binding.signupButton.isEnabled = enalbed
}
}
지금까지 addTextChangedListener를 사용할때는 람다방식이 아닌 인자로 입력전, 입력중, 입력후의 기능을 override하여 사용했는데 이렇게도 사용할 수 있는거 같았다.
참고하자!
# 느낀점
뷰바인딩은 너무 편하다.
파이어베이스는 위대하다!!