Development record of developer who study hard everyday.

, , ,

안드로이드 페이스북 로그인 구현하기 with facebook sdk

Facebook sdk로 페이스북 로그인 구현하기

안드로이드 블로그

나처럼 에이전시 회사에서 일하다보면 sns로그인 기능을 붙이는건 너무 흔한 일이다.
페이스북 로그인도 정말 많이 구현하는데 이때까지 주로 firebase를 통해서 기능을 구현했다.
이번에는 좀 다르게 해보려고 facebook sdk를 사용해서 구현해보려고한다.

1. 페이스북 개발자센터에 앱 등록


페이스북 개발자센터 앱 등록

☝ 페이스북 개발자 센터에서 MyApps 메뉴에 들어간다.


페이스북 개발자센터 앱 만들기

☝ 앱만들기 버튼 클릭해서 앱을 만들어준다.



페이스북 개발자 센터 앱 정보 생성

☝ 만든 앱을 클릭해서 들어가면 앱ID와 앱 시크릿 코드가 생성되어있다.


페이스북 개발자센터 플랫폼 등록

☝ 스크롤을 쭉 내려서 "플랫폼 추가" 클릭


☝ 키해시, 패키지 이름, 클래스 이름 적어주기


2. 해시키 구하기

//keyHash 구하기
try {
val info = packageManager.getPackageInfo("패키지명", PackageManager.GET_SIGNING_CERTIFICATES)
val signatures = info.signingInfo.apkContentsSigners
val md = MessageDigest.getInstance("SHA")
for(signature in signatures) {
md.update(signature.toByteArray())
val key = String(Base64.encode(md.digest(), 0))
Log.d(TAG, "Hash key: $key")
}
} catch (e : Exception) {
e.printStackTrace()
}
어떤 클래스를 import하느냐에 따라 코드에 빨간줄이 생길 때가 있다.

잘보고 참고하길 바란다.

import android.content.pm.PackageManager
import android.util.Base64
import java.security.MessageDigest

3. dependency 추가


build.gradle 앱수준 파일에 들어가서 아래처럼 facebook login sdk를 추가한다.
dependencies {

//facebook
implementation 'com.facebook.android:facebook-login:11.3.0'

}

4. 페이스북 앱ID와 시크릿 코드 저장


1번에서 앱등록할 때 생성된 앱ID와 시크릿코드를 strings.xml 파일에 저장해둔다.
<resources>
<string name="facebook_app_id">00000000000000</string>
<string name="facebook_secret_code">x00000x000ff915017b2e71a037305ab</string>
</resources>

5. meta-data 및 인터넷 권한 등록

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.atest.test">

<uses-permission android:name="android.permission.INTERNET" />

<queries>

<provider android:authorities="com.facebook.katana.provider.PlatformProvider" />

</queries>

<application
android:name="com.atest.test.MainApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true">

<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />

</application>

</manifest>
manifest.xml파일에 인터넷 권한, queries, meta-data를 작성해준다.

6. 페이스북 로그인 코드 작성

private fun tryFacebookLogin() {
val loginManager = LoginManager.getInstance()    //1

loginManager.logInWithReadPermissions(this, Arrays.asList("public_profile", "email"))    //2
loginManager.registerCallback(callbackManager, object : FacebookCallback<LoginResult?> {    //3
override fun onSuccess(result: LoginResult?) {
Log.d(TAG, "Facebook login success: ")

val request = GraphRequest.newMeRequest(result?.accessToken) { jsonObj, response ->    //4
try {
Log.d(TAG, "jsonObj : ${jsonObj.toString()}")
val id = response?.getJSONObject()?.getString("id").toString()
val email = response?.getJSONObject()?.getString("email").toString()

loginSuccessCall("success", id, email, "", "F")
} catch (e: Exception) {
e.printStackTrace()
}
}

val parameters = Bundle()
parameters.putString("fields", "email")
request.parameters = parameters
request.executeAsync
()    //5
}

override fun onCancel() {
Log.d(TAG, "Facebook login cancel: ")
loginFailureCall("user canceled", "F")
}

override fun onError(error: FacebookException?) {
Log.d(TAG, "Facebook login error: ")
loginFailureCall("error occurred", "F")
}
})
}
1 => facebook loginManager 객체를 만들어준다

2 => 필요한 권한을 입력한다.

3 => 페이스북 로그인 성공, 실패, 에러시 호출할 콜백함수를 등록한다.

4 => 페이스북 로그인에 성공했을 때 필요한 사용자의 정보를 가져올 request 객체를 만든다.

5 => 사용자 정보 가져오기 실행

✋ 그래프 API
페이스북에서는 사용자의 정보를 가져오는 API를 "그래프 API"라고 한다.
여기에 들어가면 그래프API를 테스트할 수 있다.

페이스북 그래프api 테스트

1 => 먼저, 토큰을 생성한다.
만약 로그인 창이 뜨면 로그인을 하면된다.

2 => 사용자 정보요청에 필요한 권한을 설정한다.

3 => "제출" 누르면 테스트가 실행된다.

4 => 더 필요한 정보가 있다면 필드를 추가해서 테스트한다.

👉 사용자 정보 요청에 필요한 권한은 "내 앱" -> "앱 검수" -> "권한 및 기능"에 들어가서 설정한다. (아래 그림 참고)

페이스북 사용자 권한 요청





Share:
Location: 대한민국

댓글 없음:

댓글 쓰기