2021.04.11 - [안드로이드/기본] - [Android] 파이어베이스 연결 후 로그인 구현하기
파이어베이스가 연결되어 있지 않다면 연결해야한다.
사용해보기
developers.facebook.com/?locale=ko_KR
페이스북 개발자 페이지에 접속해준다.
로그인 후 내앱 -> 앱 만들기
만든 후 대시보드 -> Facebook 로그인
안드로이드 클릭
1번은 생략해주고
2번에서
Project의 gradle 에
mavenCentral()
추가
Module의 gradle 에
implementation 'com.facebook.android:facebook-android-sdk:[4,5)'
추가
3번에서
패키지 이름 추가
앱을 등록하지 않아서 발생하는 오류로 패키지 이름 사용 클릭
private fun getHashKey() {
var packageInfo: PackageInfo? = null
try {
packageInfo =
packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
} catch (e: PackageManager.NameNotFoundException) {
e.printStackTrace()
}
if (packageInfo == null) Log.e("KeyHash", "KeyHash:null")
for (signature in packageInfo!!.signatures) {
try {
val md = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
Log.d(
"KeyHash",
Base64.encodeToString(md.digest(), Base64.DEFAULT)
)
} catch (e: NoSuchAlgorithmException) {
Log.e(
"KeyHash",
"Unable to get MessageDigest. signature=$signature",
e
)
}
}
}
4번에서 해시를 추가해주어야 하는데,
이 코드를 붙여넣고 onCreate() 에서 호출해주면 해시를 알 수 있다.
알아낸 해시 값을
추가해준다.
5번 허가해준다.
6번에서 하라는 대로 다 추가해준다.
파이어베이스 콘솔로 돌아와서
리디렉션값을 복사하여
추가해준다.
기본설정으로 와서 앱ID와 시크릿코드를 복사하여
파이어베이스에서 넣어준다.
이제 액티비티로 와서
var callbackManager : CallbackManager? = null
페이스북에서의 결과값을 받아올 콜백메소드 선언해준다.
callbackManager = CallbackManager.Factory.create()
onCreate()에서 생성
callbackManager?.onActivityResult(requestCode,resultCode,data)
onActivityResult 에 추가해준다.
fun facebookLogin(){
LoginManager.getInstance()
.logInWithReadPermissions(this, Arrays.asList("public_profile","email"))
LoginManager.getInstance()
.registerCallback(callbackManager, object : FacebookCallback<LoginResult>{
override fun onSuccess(result: LoginResult?) {
// 로그인 성공시
handleFacebookAccessToken(result?.accessToken)
// 파이어베이스로 로그인 데이터를 넘겨줌
}
override fun onCancel() {
}
override fun onError(error: FacebookException?) {
}
})
}
로그인 함수를 작성해준다.
로그인 성공시 페이스북 데이터를 파이어베이스로 넘긴다.
fun handleFacebookAccessToken(token : AccessToken?){
var credential = FacebookAuthProvider.getCredential(token?.token!!)
auth?.signInWithCredential(credential)
?.addOnCompleteListener{
task ->
if(task.isSuccessful){
// 아이디, 비밀번호 맞을 때
moveMainPage(task.result?.user)
Toast.makeText(this,"로그인 성공",Toast.LENGTH_SHORT).show()
}else{
// 틀렸을 때
Toast.makeText(this,task.exception?.message,Toast.LENGTH_SHORT).show()
}
}
}
토큰을 받아와 구글 로그인이랑 비슷한 방식으로 처리해주는 함수를 작성한다.
// 페이스북 로그인 버튼
facebookButton.setOnClickListener { facebookLogin() }
버튼에 연결해준다.
잘 구현된 것을 확인할 수 있다.
github.com/HanYeop/AndroidStudio-Practice/tree/master/Firebase_test