이번 시간에는 채팅앱 만들기 네 번째 시간 등록한 이메일로 로그인하는 기능과
회원가입 사용자 정보를 DB에 저장하는 기능을 구현하겠습니다.
이전 포스팅은 아래 링크를 들어가시면 됩니다.
2022.10.20 - [안드로이드] - [안드로이드 코틀린] 채팅앱 만드는 방법 part3 - Firebase 인증 서비스
- 로그인 -
- 사용자 저장 -
- 설명 -
1. mAuth: FirebaseAuth
인증 객체
2. mAuth = Firebase.auth
인증 객체 초기화
3. login(email: String, password: String)
로그인 기능 함수
4. mAuth.signInWithEmailAndPassword(email, password)
인증 서비스 기능
등록된 이메일과 패스워드 검증
class LogInActivity : AppCompatActivity() {
lateinit var binding: ActivityLogInBinding
lateinit var mAuth: FirebaseAuth
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityLogInBinding.inflate(layoutInflater)
setContentView(binding.root)
//인증 초기화
mAuth = Firebase.auth
//로그인 버튼 이벤트
binding.loginBtn.setOnClickListener {
val email = binding.emailEdit.text.toString()
val password = binding.passwordEdit.text.toString()
login(email, password)
}
//회원가입 버튼 이벤트
binding.signUpBtn.setOnClickListener {
val intent: Intent = Intent(this@LogInActivity, SignUpActivity::class.java)
startActivity(intent)
}
}
/**
* 로그인
*/
private fun login(email: String, password: String){
mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
//성공 시 실행
val intent: Intent = Intent(this@LogInActivity,
MainActivity::class.java)
startActivity(intent)
Toast.makeText(this, "로그인 성공", Toast.LENGTH_SHORT).show()
finish()
} else {
//실패 시 실행
Toast.makeText(this, "로그인 실패", Toast.LENGTH_SHORT).show()
Log.d("Login", "Error: ${task.exception}")
}
}
}
}
3-1 firebase 홈페이지
https://console.firebase.google.com/
3-2 프로젝트 클릭
3-3 빌드 -> Realtime Database
3-4 데이터베이스 만들기
3-5 위치 선택 -> 다음
3-6 테스트 모드 시작 체크 -> 사용 설정
3-7 생성된 화면
- tools -> firebase -> 위에서 3번째(Realtime Database) 선택
- Get started with Realtime Database [KOTLIN] 클릭
- 설명 -
1. signUp(name, email, password)
회원가입 함수에 name 파라미터 추가
2. addUserToDatabase(name: String, email: String, uId: String)
데이터베이스에 저장하는 함수
이름, 이메일, uid(인증 데이터에 저장된 정보)
3. mDbRef.child("user").child(uId).setValue(User(name, email, uId))
user안에 uid안에 사용자 정보를 저장합니다.
class SignUpActivity : AppCompatActivity() {
lateinit var binding: ActivitySignUpBinding
lateinit var mAuth: FirebaseAuth
private lateinit var mDbRef: DatabaseReference
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivitySignUpBinding.inflate(layoutInflater)
setContentView(binding.root)
//인증 초기화
mAuth = Firebase.auth
//db 초기화
mDbRef = Firebase.database.reference
binding.signUpBtn.setOnClickListener {
val name = binding.nameEdit.text.toString().trim()
val email = binding.emailEdit.text.toString().trim()
val password = binding.passwordEdit.text.toString().trim()
signUp(name, email, password)
}
}
/**
* 회원 가입
*/
private fun signUp(name: String, email: String, password: String){
mAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
// 성공시 실행
Toast.makeText(this, "회원가입 성공", Toast.LENGTH_SHORT).show()
val intent: Intent = Intent(this@SignUpActivity, MainActivity::class.java)
startActivity(intent)
addUserToDatabase(name, email, mAuth.currentUser?.uid!!)
} else {
// 실패시 실행
Toast.makeText(this, "회원가입 실패", Toast.LENGTH_SHORT).show()
Log.d("SignUp", "Error: ${task.exception}")
}
}
}
private fun addUserToDatabase(name: String, email: String, uId: String){
mDbRef.child("user").child(uId).setValue(User(name, email, uId))
}
}
- 설명 -
1. DB에 저장할 사용자 정보를 담을 모델 클래스
data class User(
var name: String,
var email: String,
var uId: String
){
constructor(): this("", "", "")
}
2022.10.14 - [안드로이드] - [안드로이드 코틀린] 텍스트뷰 TextView 동적으로 생성하는 방법
2022.10.11 - [안드로이드] - [안드로이드 코틀린] 갤러리에서 선택한 사진 이미지뷰(ImageView)에 보여주는 방법
2022.10.06 - [안드로이드] - [안드로이드 코틀린] tic-tac-toe 보드게임 만드는 방법 part1 - 뷰 바인딩 및 화면구성
[안드로이드 코틀린] 채팅앱 만드는 방법 part6 - Firebase 메뉴 생성 및 로그아웃 (2) | 2022.10.25 |
---|---|
[안드로이드 코틀린] 채팅앱 만드는 방법 part5 - Firebase 사용자 리스트 (0) | 2022.10.24 |
[안드로이드 코틀린] 채팅앱 만드는 방법 part3 - Firebase 인증 서비스 (2) | 2022.10.20 |
[안드로이드 코틀린] 채팅앱 만드는 방법 part2 - 회원가입 액티비티 (2) | 2022.10.19 |
[안드로이드 코틀린] 채팅앱 만드는 방법 part1 - 로그인 액티비티 (2) | 2022.10.18 |
댓글 영역