본문 바로가기
Develop/Android

firebase 이용하여 facebook 로그인 연동하기 - android kotlin

by 라이프레이서 2020. 9. 24.
반응형

지난 포스팅에서는 Firebase에 Google 계정을 이용한 로그인 연동을 해보았습니다.

이번 포스팅에서는 Firebase에 facebook 로그인 연동하는 방법에 대해 알아보겠습니다.

* 해당 포스팅에서 다루는 언어는 kotlin입니다.

[0. 앱 등록하기]

facebook developer 페이지로 이동하여 자신의 앱을 등록합니다.

developers.facebook.com/

 

Facebook for Developers

Facebook for Developers와 사용자를 연결할 수 있는 코드 인공 지능, 비즈니스 도구, 게임, 오픈 소스, 게시, 소셜 하드웨어, 소셜 통합, 가상 현실 등 다양한 주제를 둘러보세요. Facebook의 글로벌 개발��

developers.facebook.com

우측 상단의 내 앱 -> 앱 만들기를 통해 만들어줍니다.

앱 이름과 이메일을 적고 앱 ID를 만들어주면 됩니다.

이후 대시보드로 이동합니다.

Facebook 로그인 부분에서 설정을 클릭합니다.

Android 선택해주시고,

 

[1단계]

그냥 다음을 눌러서 진행합니다.

 

[2단계]

mavenCentral()를 복사하여 project수준의 gradle의 repositories 안에 넣어줍니다.

이후 module수준의 gradle에 implementation부분을 넣어줍니다.

다 했다면 안드로이드 스튜디오 우측 상단의 Sync Now를 눌러 적용해주면 됩니다.

 

[3단계]

패키지와 클래스 이름을 적고 save를 누르면 위와 같은 에러가 뜹니다. 하지만 이는 Google Play Store에 해당 앱이 등록되어 있지 않기 때문에 나오는 에러입니다. 이 패키지 이름 사용을 클릭하여 다음 단계로 넘어가시면 됩니다.

 

[4단계]

키 해시를 구하기 위해서 안드로이드 스튜디오로 돌아가 LoginActivity에 아래 코드를 복사하여 넣어줍니다.

fun printHashKey() {
    try {
        val info: PackageInfo = packageManager
            .getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
        for (signature in info.signatures) {
            val md: MessageDigest = MessageDigest.getInstance("SHA")
            md.update(signature.toByteArray())
            val hashKey: String = String(Base64.encode(md.digest(), 0))//Android.util의 Base64를 import 해주시면 됩니다.
            Log.i("facebookLogin", "printHashKey() Hash Key: $hashKey")
        }
    } catch (e: NoSuchAlgorithmException) {
        Log.e("facebookLogin", "printHashKey()", e)
    } catch (e: Exception) {
        Log.e("facebookLogin", "printHashKey()", e)
    }
}

onCreate() 안에 printHashKey()를 호출하도록 한 후, 프로젝트를 실행합니다.

Logcat에서 facebookLogin을 검색하고 확인하면 다음과 같이 Hash Key가 나옵니다.

이를 복사하여 4단계에 넣어주면 됩니다.

 

[5단계]

 

'예'로 바꿔주고 다음 단계로 갑니다.

페이스북 개발자 페이지에서 시키는대로 하면 됩니다만 어느 위치에 넣는지 상세히 풀어보았습니다.

 

[6단계]

파이어베이스 콘솔에서 Authentication - Sign-In method에서 Facebook 로그인을 사용하도록 합니다. 이후 OAuth리디렉션 URI를 복사하여, Facebook 개발자 페이지로 갑니다.

Facebook 로그인의 설정 - 유효한 OAuth 리디렉션 URI에 복사한 내용을 넣고 저장합니다.

이후 페이스북 개발자 페이지 좌측 상단의 설정 - 기본 설정으로 들어갑니다.

여기서 나오는 앱 ID와 앱 시크릿 코드를 복사하여 Firebase콘솔의 Facebook 앱 정보 입력란에 넣어줍니다.

여기까지 페이스북 로그인 사용을 위한 설정이 끝났습니다.

이제 프로젝트에서 직접 적용해보겠습니다.

[activity_login.xml]

페이스북 로그인 버튼을 추가해줍니다.

<Button
    android:id="@+id/facebookSignInBtn"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:text="페이스북 로그인"
    app:layout_constraintEnd_toEndOf="parent"
    android:layout_marginStart="16dp"
    android:layout_marginEnd="16dp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/googleSignInBtn" />

[LoginActivity]

전역변수로 callbackManager를 지정해줍니다.

이후 onCreate()내부에서 callbackManager를 초기화해줍니다.

* printHashKey() 함수는 더 이상 사용하지 않아도 되기에 주석처리나 삭제해도 됩니다.

private fun facebookLogin(){
    LoginManager.getInstance()
        .logInWithReadPermissions(this, listOf("public_profile","email"))
    LoginManager.getInstance()
        .registerCallback(callbackManager, object : FacebookCallback<LoginResult>{
            override fun onSuccess(result: LoginResult?) {
                handleFBToken(result?.accessToken)
            }
            override fun onCancel() {}
            override fun onError(error: FacebookException?) {}
        })
}

이후 facebookLogin()이라는 함수를 만들어줍니다.

프로필과 이메일에 대한 권한을 요청하며, 로그인 성공 시 토큰을 받아와 handleFBToken이라는 함수를 호출합니다. handleFBToken도 만들어주겠습니다.

private fun handleFBToken(token : AccessToken?){
	var credential = FacebookAuthProvider.getCredential(token?.token!!)
	auth?.signInWithCredential(credential)
      ?.addOnCompleteListener(this) { task ->
      if (task.isSuccessful) {
          Log.d(TAG, "로그인 성공")
          val user = auth!!.currentUser
          loginSuccess(user)
      } else {
          Log.w(TAG, "signInWithCredential:failure", task.exception)
          }
      }
}

이제 facebookSignInBtn를 클릭 시 facebookLogin() 함수를 호출하도록 설정해줍니다.

facebookSignInBtn.setOnClickListener {
    facebookLogin()
}

onActivityResult에 callbackManager 부분을 추가합니다.

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    callbackManager?.onActivityResult(requestCode, resultCode, data)

 

이후 프로젝트를 실행하면 Facebook 로그인이 구현됨을 확인할 수 있습니다.

 

[구글 로그인 연동 알아보기]

 

Firebase 이용하여 Google Login 구현하기 _ Android Kotlin

Android에서 Firebase를 이용하여 Google Login을 구현하는 방법에 대해 알아보겠습니다. 해당 포스팅에서의 Android 언어는 Kotlin을 사용하였습니다. 1. Firebase와 프로젝트 연결하기 Firebase를 프로젝트에서

chjune0205.tistory.com

 

반응형