[Android/SDK연동]SNS 로그인 구현(4) - 페이스북

2021. 5. 12. 22:01Android/튜토리얼 및 가이드

728x90
반응형
 

Android - Facebook 로그인 - 문서 - Facebook for Developers

 

developers.facebook.com

 

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에 들어간 값을 반환한다.

728x90
반응형