1. dependcies{}에 의존성을 추가해준다.
implementation 'com.facebook.android:facebook-login:[8.1)'
2. 리소스 및 매니페스트 수정
2-1 )/app/res/values/strings.xml 파일에 아래 소스 추가한다.
<string name="facebook_app_id">{facebook_app_id}</string>
<string name="fb_login_protocol_scheme">{fb_login_protocol_scheme}</string>
2-2) AndroidMenifest.xml에 meta-data 요소, Facebook에 대한 활동, Chrome 맞춤 탭에 대한 활동 및 인텐트 필터를 application 요소를 추가해준다.
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id"/>
<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>
3. xml에 페이스북 로그인 버튼을 추가한다.
<com.facebook.login.widget.LoginButton
android:id="@+id/login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="30dp"
android:layout_marginBottom="30dp" />
4. 버튼 클릭리스너 안에 콜백을 등록해준다.
4-1) 로그인 응답을 처리할 콜백 관리자를 만든다.
callbackManager = CallbackManager.Factory.create();
4-2) 로그인 계정의 정보를 담을 객체 LoginManager를 생성한다.
LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile"));
* 계정 정보 중 "public_profile"에 담긴 내용들을 배열로 담아옴
4-3) 로그인을 실행하는 LoginManager를 콜백한다.
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// 로그인 성공 로직
}
@Override
public void onCancel() {
// 로그인 취소 로직
}
@Override
public void onError(FacebookException exception) {
// 로그인 실패 로직
}
});
5. SubActivity(로그인화면)에서 로그인을 진행한 후 MainActivity로 돌아왔을 때 callbackManager.onActivityResult를 호출하여 로그인 결과를 callbackManager를 통해 LoginManager에 전달합니다.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
callbackManager.onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}
6. onSuccess() 메서드 안에서 로그인 계정 정보를 가져온다.
6-1) 앱에서는 한 번에 사용자 한 명만 로그인할 수 있으며 LoginManager는 로그인한 사용자의 현재 AccessToken 및 Profile을 설정한다.
AccessToken fbAccessToken = AccessToken.getCurrentAccessToken();
6-2) 위에서 얻어온 토큰을 이용해 계정 정보를 받는 GraphRequest 객체를 생성한다.
GraphRequest request = GraphRequest.newMeRequest(fbAccessToken, (object, response) -> {
try {
// 로그인 정보
Log.d("FB", "login email : " + object.getString("email"));
} catch (JSONException je) {
Log.d("FB", "No key provided.");
}
});
6-3) 위에서 만든 request를 호출한다.
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,gender,birthday");
request.setParameters(parameters);
request.executeAsync();
* Bundle 형식의 parameters에 객체를 생성한다. (Bundle 클래스에 Mapping(대응, 변환)하는 것이다.)
* parameters에 "fields"라는 object와 위 내용들을 reponse에 넣고, 이를 request에 매개변수로 뿌려준다.
* request 객체를 실행시켜 parameters에 들어간 값을 반환한다.
'Android > 튜토리얼 및 가이드' 카테고리의 다른 글
[Android/SDK연동]SNS 로그인 구현(6) - 카카오톡 로그인 SDK V2 (0) | 2021.05.14 |
---|---|
[Android/API]SNS 로그인 구현(5) - 네이버 JSON 파싱으로 계정 정보 얻어오기 (0) | 2021.05.14 |
[Android/SDK연동]SNS 로그인 구현(2) - 카카오톡 sdk v1 (0) | 2021.05.11 |
[Android/SDK연동]SNS 로그인 구현(1) - 네이버 (0) | 2021.05.10 |
[Android/API]MS-SQL DB를 안드로이드 스튜디오와 연결하기 (0) | 2021.05.08 |