- 안드로이드 소셜 로그인 연동 페이스북 버전
1. https://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
※파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음※
'IT개발일지 > Android' 카테고리의 다른 글
[Android]Volley Multipart 파일 전송하기 (0) | 2022.07.14 |
---|---|
[Android] Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent (0) | 2022.04.14 |
[Android]Android 11 다른 앱 열기 (0) | 2021.09.23 |
[Android]View 투명도 설정하기 (Xml Alpha 값 주기) (0) | 2021.07.14 |
[Android] 카카오 로그인 연동하기 V2 - JAVA (0) | 2021.04.01 |