본문 바로가기

IT개발일지/Android

[Android] 페이스북 로그인 연동 (2022버전)

- 안드로이드 소셜 로그인 연동 페이스북 버전

1. https://developers.facebook.com/

 

Meta for Developers

메타버스에서 선보이는 창의성 경험하기 10월 11일에 열리는 Meta Connect에서 전 세계의 혁신가들을 만나보세요. 메타버스의 아름답고 긴밀히 연결된 세상을 함께 구상할 방법을 알아보세요. 저장

developers.facebook.com

해당 링크를 방문하여 내 앱을 생성하여준다.

* 여기서 주의할 점은 개인정보처리방침 URL 및 데이터 삭제 콜백 URL을 입력해주어야 라이브 상태로 변경할 수 있다.

2. 해시키 등록 및 패키지이름 등록

해시키의 경우 디버그 key 릴리즈key 를 등록해주시면 됩니다.
클래스 이름의 경우 로그인을 구현할 actvity 명을 입력해주시면 됩니다.

3. 고급설정 부분

* 클라이언트 토큰 부분은 어플리케이션에 저장해두어야한다.

첫부분 두번째 부분 기본정보 앱ID입력
세번째 부분 클라이언트 토큰 값 입력

4. 메니페스트 설정

<queries>
    <package android:name="com.facebook.katana" />
    
</queries>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
<meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>

<activity android:name="com.facebook.FacebookActivity"
    android:configChanges= "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
    android:label="@string/app_name" />
<activity android:name="com.facebook.CustomTabActivity" android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="@string/fb_login_protocol_scheme" />
    </intent-filter>
</activity>
implementation 'com.facebook.android:facebook-android-sdk:13.1.0'
/*implementation 'com.facebook.android:facebook-android-sdk:[4,5)'*/
implementation 'com.facebook.soloader:soloader:0.6.1'
pluginManagement {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        jcenter()
        mavenCentral()
       
    }
}
rootProject.name = "프로젝트네임"
include ':app'

5. 로그인 코드설정

private fun facebookLogin() {
    loginManager?.logInWithReadPermissions(this, Arrays.asList("public_profile", "email"))
    loginManager?.registerCallback(
        callbackManager,
        object : FacebookCallback<LoginResult> {
            override fun onCancel() {
                Toast.makeText(context, "페이스북 로그인 취소!", Toast.LENGTH_LONG).show()
            }

            override fun onError(error: FacebookException) {
                if (AccessToken.getCurrentAccessToken() != null) {
                    LoginManager.getInstance().logOut()
                }
                Log.d("Login", error.message.toString())
                Log.e("Login", error.message ?: "Unknown error")
            }

            override fun onSuccess(result: LoginResult) {
                Log.d("Facebook Login_", result.toString())
                val accessToken = result.accessToken
                Log.d("Facebook Login_token", accessToken.toString())
                firebaseAuthWithFacebook(accessToken)
            }
        })
}
private fun firebaseAuthWithFacebook(accessToken: AccessToken?) {
    // AccessToken 으로 Facebook 인증
    val credential = FacebookAuthProvider.getCredential(accessToken?.token!!)

    // 성공 시 Firebase 에 유저 정보 보내기 (로그인)
    auth?.signInWithCredential(credential)
        ?.addOnCompleteListener{
                task ->
            if(task.isSuccessful){ // 정상적으로 email, password 가 전달된 경우
                val user = auth?.currentUser
                Log.d("Facebook Login_user", user.toString())
                if (user != null) {
                    Log.d("Facebook Login_user_2_", user.toString())
                    loginToken = user.uid
                    loginName = user.displayName.toString() ?: ""
                    loginNick = user.displayName.toString() ?: ""
                    loginPhoneNum = user.phoneNumber.toString() ?: ""
                    loginState = "facebook"
                    Toast.makeText(context, "페이스북 로그인 성공!", Toast.LENGTH_LONG).show()
                    login()
                }
            } else {
                // 예외 발생 시 메시지 출력
                Log.d("Facebook Login_exception", task.exception?.message.toString())
                Toast.makeText(this, task.exception?.message, Toast.LENGTH_LONG).show()
            }
        }
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    if(requestCode == GOOGLE_LOGIN_CODE) {
        
    } else {
        // 로그인 결과를 callbackManager를 통해 loginManager에게 전달
        callbackManager?.onActivityResult(requestCode, resultCode, data)
    }
    super.onActivityResult(requestCode, resultCode, data)
}

6. 로그아웃 코드설정

if (AccessToken.getCurrentAccessToken() != null) {
    LoginManager.getInstance().logOut();
}

7. FACEBOOK 로그인 클라이언트 OAuth 설정 부분

8. 파이어베이스 로그인 연동

* 페이스북 추가 또는 수정하기를 눌러 앱ID 및 시크릿 코드 입력

 

-관련에러
User logged in as different Facebook user.
The supplied auth credential is malformed or has expired.
Error validating application. Application has been deleted

 

 

 

※파트너스 활동을 통해 일정액의 수수료를  제공받을 수 있음※