Firebase ๋ก๊ทธ์ธ ๋ฐ ํ์๊ฐ์ ์ฐ๊ฒฐ? ํ๋๋ ์ด๋ ต์ง ์์์ ! ใ
์๋๋ก์ด๋์์ Firebase๋ฅผ ๋จผ์ ์ฐ๊ฒฐํด์ฃผ์. ์๋จ์ Tools - Firebase๋ฅผ ๋๋ฌ Firebase๋ฅผ ์ด์ด์ค ๋ค, Authentication์ ํด๋ฆญํด ์ฌ์ดํธ๋ฅผ ์ด์ด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ์์ ์์๋๋ก ๋ฒํผ์ ํด๋ฆญํด ์ฐ๊ฒฐ์ ์งํํด์ค๋ค.
Connect to Firebase
์ฌ์ดํธ์์ ์น์ ํ๊ฒ ๋จ๊ณ๋ณ๋ก ํ๋ผ๋ ๊ฒ์ด ๋์์๊ธฐ ๋๋ฌธ์ ๊ทธ๋๋ก ์งํํ๊ณ ๋๋ฉด ์ด๋ ๊ฒ ์ฑ์ด ์์ฑ๋์๋ค๋ ์๋ฆผ์ด ๋จ๊ณ ์ฐ๊ฒฐ ๋ฒํผ์ ๋๋ฌ์ฃผ๋ฉด ๋๋ค.
ADD SDK
์ฐ๊ฒฐ ๋ฒํผ ๋๋ ์ผ๋๊น ๋??? ๐
โโ๏ธ
์ฐ๊ฒฐ์ ํด์คฌ์ผ๋, ์ด์ Firebase ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ก์ธ์ค ํ ์ ์๊ฒ ํด์ฃผ๊ณ , ๋ฏธ๋ค์จ์ด๋ผ๋ ์ฑ๊ฐ์ ๊ตฌ์ฑ์์๋ฅผ ์์จ ์ ์๋๋ก ํด์ฃผ๊ธฐ ์ํ SDK๋ฅผ ์ถ๊ฐํด์ค์ผ ํ๋ค.
๊ทธ๋ฌ๋๊น, ๋ค์ ์๋๋ก์ด๋ ์คํ๋์ค๋ก ๋์์์ Authencate using Google์์ add sdk to your app ๋ฒํผ์ ๋๋ฌ์ SDK ๋ถ๋ถ๋ ์ถ๊ฐํด์ฃผ์.
๊ตฌ์ฑ ํ์ผ ์ถ๊ฐ
Android ํ๋ก์ ํธ์ Firebase ์ถ๊ฐ๋ฅผ ์ํ ๊ณต์๋ฌธ์์์ Firebase ๊ตฌ์ฑ ํ์ผ์ ์ถ๊ฐํ๋ ๋ถ๋ถ์ ํ์ธํ๊ณ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ค๋ค.
https://firebase.google.com/docs/android/setup?hl=ko
google-services.json ํ์ผ์ด ์กด์ฌํ๋์ง project - app ์์ ํ์ธํด firebase์์์ API ํค ๋ฑ๋ฑ์ด ์๋ค์ด๊ฐ ์๋์ง ํ์ธํ๋ค.
Firebase์ ๊ณต์ ๋ฌธ์๋๋ก ํ์๊ฐ์ ๋ฐ ๋ก๊ทธ์ธ ์ ํ์ํ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค.
Firebase Authentication๊ณผ ์ฐ๊ฒฐํ๊ธฐ ์ํ auth = FirebaseAuth.getInstance() ๋ ํ์ !
ํ์๊ฐ์ ๊ธฐ๋ฅ
signupActivity
์์ ์ฌ์ฉํ๋ editText
๋ฐ Button
์ ์์๋ก ์ ์ธํด์ฃผ๊ณ , ์ด๋ฉ์ผ editText
์๋ ์ด๋ฉ์ผ ํ์์ ์
๋ ฅํ์ ๊ฒฝ์ฐ์๋ง ํ์๊ฐ์
์ด ๊ฐ๋ฅํ๋๋ก ์ฒ๋ฆฌํด์ค ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฉ์ผ ํ์์ธ์ง ์๋์ง๋ฅผ ํ๋จํ๊ธฐ ์ํ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ค๋ค.
// ์ฌ๋ฐ๋ฅธ ์ ๋ณด ์
๋ ฅ ํ, ํ์ธ ๋ฒํผ ํด๋ฆญ ์ Firebase์ Auth์ ๋ฐ์ดํฐ ์ ์ฅ
auth.createUserWithEmailAndPassword(email, pw)
.addOnCompleteListener { task ->
// ํ์๊ฐ์
์ฑ๊ณต ์
if (task.isSuccessful) {
sendVerifyEmail()
toastMessage("ํ์๊ฐ์
์ฑ๊ณต!")
val user = auth.currentUser
// ํ์๊ฐ์
์ฑ๊ณต ํ ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ๋์๊ฐ๊ธฐ
val intent = Intent(this, SignInActivity::class.java)
startActivity(intent)
finish()
}
// ํ์๊ฐ์
์คํจ ์
else {
val error = task.exception?.message ?: "์ ์ ์๋ ์ค๋ฅ"
toastMessage("ํ์๊ฐ์
์ ์คํจํ์ต๋๋ค. ์ค๋ฅ : $error")
}
}
์ฝ๋๋ฅผ ์ฐฌ์ฐฌํ ๋ฏ์ด์ ์ดํด๋ณด์.
createUserWithEmailAndPassword
์ด๊ฒ ์ ํํ ๋ญ๊น?๐ค
์ ๊ท ์ฌ์ฉ์์ ์ด๋ฉ์ผ ์ฃผ์์ ๋น๋ฐ๋ฒํธ๋ฅผ createUserWithEmailAndPassword๋ก ์ ๋ฌํด ์ ๊ท ๊ณ์ ์ ์์ฑํด์ค ๋ ์ฌ์ฉ๋๋ค. ํ์๊ฐ์ ํ ๋ ๋ฃ์ด์ ์๋ก์ด ์์ฑ์๋ฅผ ๋ง๋ค์ด์ค๋ค.
ํ์๊ฐ์ ์ฑ๊ณต์์ ํ์๊ฐ์ ์คํจ ์์ ๋ฐ๋ฅธ ์กฐ๊ฑด์ ์ถ๊ฐํด์ค์ผ ํ๋ค. ์ถ๊ฐํด์ฃผ์ง ์์ผ๋ฉด ์์ธ์ฒ๋ฆฌ ์๋ฌ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ฃผ์ํด์ ๊ผญ ์ถ๊ฐํด์ฃผ๋๋ก !
๋ก๊ทธ์ธ ๊ธฐ๋ฅ
// ๋ก๊ทธ์ธ ๋ฒํผ์ ๋๋ฅผ ๊ฒฝ์ฐ
binding.btnSignin.setOnClickListener {
val email = binding.signinEtEmail.text.toString()
val pw = binding.signinEtPw.text.toString()
// ์ด๋ฉ์ผ ๋ฐ ํจ์ค์๋๊ฐ ๋น์ด์์ง ์์ ๊ฒฝ์ฐ
if (email.isNotEmpty() && pw.isNotEmpty() && emailCheck && pwCheck) {
// Firebase์์ ๋ก๊ทธ์ธ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
auth.signInWithEmailAndPassword(email, pw)
.addOnCompleteListener { task ->
if (task.isSuccessful) {
// ๋ก๊ทธ์ธ ์ฑ๊ณต ์
val user = auth.currentUser
if(user != null && user.isEmailVerified) {
val signInIntent = Intent(this, MainActivity::class.java)
toastMessage("๋ก๊ทธ์ธ ์ฑ๊ณต !")
startActivity(signInIntent)
}
// ์ด๋ฉ์ผ ์ธ์ฆ ์ํ์ ๊ฒฝ์ฐ
else {
toastMessage("์ด๋ฉ์ผ ํ์ธ ํ ๋ก๊ทธ์ธ์ด ๊ฐ๋ฅํฉ๋๋ค.")
}
} else {
// ๋ก๊ทธ์ธ ์คํจ ์
toastMessage("์์ด๋ ๋๋ ๋น๋ฐ๋ฒํธ๊ฐ ์ผ์นํ์ง ์์ต๋๋ค.")
}
}
}
else {
toastMessage("๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ์
๋ ฅํด ์ฃผ์ธ์.")
}
}
RealTimeDB๋ฅผ ์ด์ฉํด์ ํ์๊ฐ์
์์ ์
๋ ฅํ๋ ์ ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋จํ๊ฒ ์ด๋ฆ, ์์ด๋, ๋๋ค์ DB๋ฅผ ์ค์๊ฐ์ผ๋ก ์์ฑํด์ค๋ค.
userReference์ key๊ฐ์ pushํด์ ๋ฐ์ดํฐ๋ฅผ FirebaseDB์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. addOnCompleteListener
์ ์ด์ฉํด ํ์๊ฐ์
์ฑ๊ณต ์์ ์คํจ ์์ ๋ฐ๋ฅธ ์์ธ์ฒ๋ฆฌ๋ฅผ ๊ผญ ํด์ค ๊ฒ!
ํด๋น ์ฝ๋๋ Firebase RealTimeDB ๊ณต์๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด ์์ฑํด์คฌ๋ค.
private fun saveUserData(uid: String, user: UserData) {
val dataBase = FirebaseDatabase.getInstance()
val userReference = dataBase.getReference("users")
userReference.child(uid).setValue(user)
val userId = userReference.push().key
userId?.let {
userReference.child(uid).setValue(user)
.addOnCompleteListener { task ->
// ํ์๊ฐ์
์ฑ๊ณต ์
if (task.isSuccessful) {
//toastMessage("RealTime userData ์์ฑ ์ฑ๊ณต!")
}
// ํ์๊ฐ์
์คํจ ์
else {
val error = task.exception?.message ?: "์ ์ ์๋ ์ค๋ฅ"
toastMessage("RealTime userData ์์ฑ ์คํจ! ์ค๋ฅ: $error")
}
}
}
}
ํ์๊ฐ์ ์คํจ ์์ ์ ๋ณด๊ฐ ์๋ ํ์๊ฐ์ ์ ์ฑ๊ณตํ์ ๋์ RealTimeDB๊ฐ ์ถ๊ฐํด์ฃผ๋๋ก ์ค์ ํด์ฃผ๋ฉด ๋ !
// ํ์๊ฐ์
์ฑ๊ณต ์
if (task.isSuccessful) {
sendVerifyEmail()
toastMessage("ํ์๊ฐ์
์ฑ๊ณต!")
val user = auth.currentUser
// RealTimeDB ์ฌ์ฉ์ ์ ๋ณด์ ๊ฐ๋จํ๊ฒ ์ด๋ฆ, ์์ด๋, ์ฑ๋ณ, ๋๋ค์ DB ์์ฑ
val userData = UserData(name, email, nick)
if (user != null) {
saveUserData(user.uid, userData)
}
// ํ์๊ฐ์
์ฑ๊ณต ํ ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ๋์๊ฐ๊ธฐ
val intent = Intent(this, SignInActivity::class.java)
startActivity(intent)
finish()
}