본문 바로가기

개발/Android 개발 주저리

[Android] 안드로이드 페이스북 로그인 10초만에 구현하기 ( Facebook Login )



바로 직전에 카카오톡 로그인 구현을 다루었습니다.

그렇다면 가장 많이 사용하는 페이스북은 어떨까요??


권한 관련 이슈가 있긴하지만 카카오톡보다 훠~~얼씬더 간단합니다.

하지만 페이스북 조금다른게 토큰요청후 그토큰을 이용하여 graph api 로 사용자 정보를 다시 조회해야합니다.

물론 모든건 페이스북 개발자센터에 다~ 나와있습니다.


본 예제는 따로 샘플없이 다룹니다.

본 예제는 로그인요청 버튼을 페이스북에서 제공하는게 아닌 커스텀하여 사용할 수 있도록 구현합니다.


카카오톡을 연동하고 싶으시면 아래 게시물을 참조하세요

[Android] 안드로이드 카카오톡 로그인 10초만에 구현하기 ( Kakao Login )




1. AndroidManifest.xml

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="페이스북APP_ID"/>

<activity android:name="com.facebook.FacebookActivity"

    android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"

    android:theme="@android:style/Theme.Translucent.NoTitleBar"

    android:label="@string/app_name" />

<provider android:authorities="com.facebook.app.FacebookContentProvider페이스북APP_ID"

    android:name="com.facebook.FacebookContentProvider"

    android:exported="true" />



2. 로그인요청 버튼 구현

  *  Arrays.asList 를 이용하여 권한을 추가로 요청하실 수 있습니다. 일부 권한은 페이스북 앱리뷰를 통과해야하니 참고하세요

private void isLoginFacebook() {

    FacebookSdk.sdkInitialize(getApplicationContext());

    callbackManager = CallbackManager.Factory.create();

    LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "email"));

    LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {

        @Override

        public void onSuccess(LoginResult loginResult) {

            Log.d("TAG", "페이스북 토큰 -> " + loginResult.getAccessToken().getToken());

            Log.d("TAG","페이스북 UserID -> " + loginResult.getAccessToken().getUserId());

        }


        @Override

        public void onCancel() {

            Log.d("TAG","취소됨");

        }


        @Override

        public void onError(FacebookException e) {

            e.printStackTrace();

        }

    });

}




3. 사용자 정보 획득 

GraphRequest request = GraphRequest.newMeRequest( 엑세스토큰 ,

    new GraphRequest.GraphJSONObjectCallback() {

        @Override

        public void onCompleted(JSONObject object, GraphResponse response) {

            Log.d("TAG","페이스북 로그인 결과" + response.toString());


            try {

                String email = object.getString("email");       // 이메일

                String name = object.getString("name");         // 이름

                String gender = object.getString("gender");     // 성별


                Log.d("TAG","페이스북 이메일 -> " + email);

                Log.d("TAG","페이스북 이름 -> " + name);

                Log.d("TAG","페이스북 성별 -> " + gender);


            } catch (Exception e) {

                e.printStackTrace();

            }

        }

    });

Bundle parameters = new Bundle();

parameters.putString("fields", "id,name,email,gender");

request.setParameters(parameters);

request.executeAsync();


4. callbackManager호출

@Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

        // 페이스북 로그인 결과를 콜백매니저에 담는다

        callbackManager.onActivityResult(requestCode, resultCode, data);

    }