
Published 2022. 5. 22. 17:29
로그인 시 Firebase 회원정보에 따라 액티비티가 나뉘는 것을 구현하였습니다.
Realtime Database 내부
Login.kt
전역변수
private lateinit var binding: ActivityLoginBinding //데이터바인딩
private var auth: FirebaseAuth? = null //파이어베이스 인증
private lateinit var OwnerDB : DatabaseReference //실시간 데이터베이스
private var userID: String? = null
private var user: FirebaseUser? = null
onCreate
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityLoginBinding.inflate(layoutInflater)
setContentView(binding.root)
auth = FirebaseAuth.getInstance()
OwnerDB = FirebaseDatabase.getInstance().getReference("Owner")
loginInit()
}
private fun loginInit() = with(binding) {
loginButton.setOnClickListener {
val id = idEditTextView.text.toString()
val pw = passwordEditTextView.text.toString()
auth!!.signInWithEmailAndPassword(id, pw).addOnCompleteListener { Task ->
user = FirebaseAuth.getInstance().currentUser
userID = user!!.uid
if(Task.isSuccessful) {
//OwnerDB에서 데이터를 가져왔을때
OwnerDB.child(userID!!).addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
//데이터를 할당
val data = snapshot.value
//데이터가 없을경우 해당유저는 User라는 의미이니 User화면으로 이동 아닌경우는 Owner화면으로 이동
if(data == null){
Toast.makeText(this@Login, "로그인을 성공하였습니다.", Toast.LENGTH_SHORT).show()
val intent = Intent(this@Login, MainActivityUser::class.java)
startActivity(intent)
}else{
Toast.makeText(this@Login, "로그인을 성공하였습니다.", Toast.LENGTH_SHORT).show()
val intent = Intent(this@Login, MainActivityOwner::class.java)
startActivity(intent)
}
}
override fun onCancelled(error: DatabaseError) {
}
})
}
}
}
}
요약
auth.signInWithEmailAndPassword를 통해ID, PW의 값이 일치하는지 확인
auth!!.signInWithEmailAndPassword(id, pw).addOnCompleteListener { Task ->
전역변수 user를 현재 유저의 데이터의 값을 정의한 후 userID의 uid 값을 함께 정의 한다
private var userID: String? = null
private var user: FirebaseUser? = null
user = FirebaseAuth.getInstance().currentUser
userID = user!!.uid //로그인 된 User의 uid
addListenerForSingleValueEvent() 메소드로 데이터를 할당 시킨 후 null로 구별하여 Activity 나누기
if(Task.isSuccessful) {
//OwnerDB에서 데이터를 가져왔을때
OwnerDB.child(userID!!).addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
//데이터를 할당
val data = snapshot.value
//데이터가 없을경우 해당유저는 User라는 의미이니 User화면으로 이동 아닌경우는 Owner화면으로 이동
if(data == null){
Toast.makeText(this@Login, "로그인을 성공하였습니다.", Toast.LENGTH_SHORT).show()
val intent = Intent(this@Login, MainActivityUser::class.java)
startActivity(intent)
}else{
//Toast 및 intent(Owner) 구현
}
}
override fun onCancelled(error: DatabaseError) {
}
})
}
}
'Android-Kotlin📱' 카테고리의 다른 글
[Android/Kotlin] 실시간 위치 구현하기 with Naver map SDK (0) | 2022.05.23 |
---|---|
[Android/Kotlin] Naver map SDK 이용한 지도 구현하기 (0) | 2022.05.23 |
Kotlin Fragment ViewBinding (0) | 2022.05.21 |
토이프로젝트 꽃밭 - 1일차 (0) | 2022.05.21 |
Android Studio Wireless Debugging (안드로이드 스튜디오 무선디버깅) (0) | 2022.05.20 |