1. 파이어베이스와 프로젝트 연결하기
firebase.google.com/?hl=ko
콘솔로 이동하여 프로젝트를 만들어준다.
프로젝트가 만들어졌으면 안드로이드 버튼을 눌러 사용하는 프로젝트에 연결해준다.
패키지 이름에 자신이 사용하고 싶은 프로젝트의 패키지 이름을 넣어주고
SHA-1 키도 입력해준다.
SHA-1 키는 우측 Gradle -> Tasks -> android -> singingReport에서 확인할 수 있다.
만약 SHA값을 찾을수 없을경우
https://hanyeop.tistory.com/97
이 글의 방법대로도 찾을 수 있다.
그 후 json 파일을 다운받아
app에 넣어준다.
이제 SDK를 추가해주면 되는데
문서 내용 대로 추가해준다.
<uses-permission android:name="android.permission.INTERNET" />
또한 매니페스트에 인터넷 권한을 추가해준다.
이제 파이어베이스가 연결되었다.
2. 로그인 기능 구현하기
좌측의 Authentication 을 들어가준다.
기본적인 로그인과,
구글 로그인을 구현하려고 한다.
firebase.google.com/docs/auth/android/password-auth?authuser=0
구글의 Firebase문서 내용을 사용할 것이다.
▶ 회원가입하기
이메일/비밀번호 사용 설정으로 바꿔주고
implementation 'com.google.firebase:firebase-auth-ktx'
모듈 gradle 파일에 추가해준다.
private var auth : FirebaseAuth? = null
사용할 액티비티에서 전역변수로 설정해주고
auth = Firebase.auth
onCreate 에서 할당해준다.
private fun createAccount(email: String, password: String) {
if (email.isNotEmpty() && password.isNotEmpty()) {
auth?.createUserWithEmailAndPassword(email, password)
?.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
Toast.makeText(
this, "계정 생성 완료.",
Toast.LENGTH_SHORT
).show()
finish() // 가입창 종료
} else {
Toast.makeText(
this, "계정 생성 실패",
Toast.LENGTH_SHORT
).show()
}
}
}
}
계정을 생성하는 createAccount 함수를 만들어준다.
signup_okButton.setOnClickListener {
createAccount(signupID.text.toString(),signupPassword.text.toString()) }
그 후 가입버튼에 연결해준다.
잘 가입되었다.
전체코드
package org.techtown.firebase_test
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase
import kotlinx.android.synthetic.main.activity_signup.*
class SignupActivity : AppCompatActivity() {
private var auth : FirebaseAuth? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
auth = Firebase.auth
setContentView(R.layout.activity_signup)
// 계정 생성 버튼
signup_okButton.setOnClickListener {
createAccount(signupID.text.toString(),signupPassword.text.toString())
}
}
// 계정 생성
private fun createAccount(email: String, password: String) {
if (email.isNotEmpty() && password.isNotEmpty()) {
auth?.createUserWithEmailAndPassword(email, password)
?.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
Toast.makeText(
this, "계정 생성 완료.",
Toast.LENGTH_SHORT
).show()
finish() // 가입창 종료
} else {
Toast.makeText(
this, "계정 생성 실패",
Toast.LENGTH_SHORT
).show()
}
}
}
}
}
▶ 로그인하기
package org.techtown.firebase_test
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.FirebaseUser
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase
import kotlinx.android.synthetic.main.activity_login.*
class LoginActivity : AppCompatActivity() {
private var auth : FirebaseAuth? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
auth = Firebase.auth
// 회원가입 창으로
signupButton.setOnClickListener {
startActivity(Intent(this,SignupActivity::class.java))
}
// 로그인 버튼
loginButton.setOnClickListener {
signIn(idEditText.text.toString(),passwordEditText.text.toString())
}
}
// 로그아웃하지 않을 시 자동 로그인 , 회원가입시 바로 로그인 됨
public override fun onStart() {
super.onStart()
moveMainPage(auth?.currentUser)
}
// 로그인
private fun signIn(email: String, password: String) {
if (email.isNotEmpty() && password.isNotEmpty()) {
auth?.signInWithEmailAndPassword(email, password)
?.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
Toast.makeText(
baseContext, "로그인에 성공 하였습니다.",
Toast.LENGTH_SHORT
).show()
moveMainPage(auth?.currentUser)
} else {
Toast.makeText(
baseContext, "로그인에 실패 하였습니다.",
Toast.LENGTH_SHORT
).show()
}
}
}
}
// 유저정보 넘겨주고 메인 액티비티 호출
fun moveMainPage(user: FirebaseUser?){
if( user!= null){
startActivity(Intent(this,MainActivity::class.java))
finish()
}
}
}
회원가입과 로그인이 다른 액티비티에서 이뤄지게 해놨기 때문에
동일하게 auth를 선언하고, signIn 함수를 구현해준다.
앱 시작 시 이미 로그인된 정보가 있다면 자동으로 로그인해준다.
로그아웃
package org.techtown.firebase_test
import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
private var auth : FirebaseAuth? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
auth = Firebase.auth
// 로그아웃
logoutbutton.setOnClickListener {
// 로그인 화면으로
val intent = Intent(this, LoginActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(intent)
auth?.signOut()
}
}
}
github.com/HanYeop/AndroidStudio-Practice/tree/master/Firebase_test