본문 바로가기

Developer/Mobile

[Android강좌] 페이스북에 로그인하기

 

 

이번에는 페이스북 2번째 강좌로... 로그인할 수 있도록 해볼까 합니다.

제가 이번에 필요한게 물론 어느정도의 개인정보인데..

그중에 생년월일이 필요했습니다..

그런데 네이버에서 찾은 소스들을 다 뒤져보니... 생년월일이 Null 값을 출력하는 시츄..

열심히 구글링 해서.. 해결한 소스입니다..

 

일단 레이아웃부터 작성해보겠습니다.

 

 <com.facebook.widget.LoginButton
        android:id="@+id/authButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="30dp"
      />

 

이 레이아웃은 페이스북 개발자 페이지에 가보시면 친절히 설명되어있는거..

카피해왔습니다.ㅋㅋ

 

Activity 소스를 보겠습니다.

 

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_quest_main); LoginButton authButton = (LoginButton) findViewById(R.id.authButton);

//원하는 내용의 퍼미션을 적용 authButton.setReadPermissions(Arrays.asList("user_birthday", "user_likes")); } public void onClick(View v) { Session.openActiveSession(this, true, new Session.StatusCallback() { // callback when session changes state @Override public void call(Session session, SessionState state, Exception exception) { if (session.isOpened()) { // make request to the /me API Request request = Request.newMeRequest(session, new Request.GraphUserCallback() { // callback after Graph API response with user object @Override public void onCompleted(GraphUser user, Response response) { if (user != null) { // here I check the infos I got. // it shows only the id, no email or birthday. Log.d("some tag", user.getInnerJSONObject().toString()); if (Session.getActiveSession() != null) { Log.i(TAG, "Log out from FB"); Session.getActiveSession().closeAndClearTokenInformation(); } } } }); // set params. request.getParameters().putString("fields", "id,email,birthday"); // execute request. request.executeAsync(); Log.d(TAG, request.toString()); } if (exception != null) { exception.printStackTrace(); } } }); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (Session.getActiveSession() != null) Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); Session currentSession = Session.getActiveSession(); if (currentSession == null || currentSession.getState().isClosed()) { Session session = new Session.Builder(getApplicationContext()).build(); Session.setActiveSession(session); currentSession = session; } if (currentSession.isOpened()) { Session.openActiveSession(this, true, new Session.StatusCallback() { @Override public void call(final Session session, SessionState state, Exception exception) { if (session.isOpened()) { Request.newMeRequest(session, new Request.GraphUserCallback() { @Override public void onCompleted(GraphUser user, Response response) { if (user != null) { Log.d("birthday", "User:" + user.getBirthday()); } } }).executeAndWait(); } } }); } }

 

최대한 줄을 맞춘다고 맞춘건데 쉽지가 않네요..ㅎㅎ;

 

1. 간단하게 설명해보면 버튼에 원하는 퍼미션을 주고

2. onClick 버튼을 클릭할시 페이스북에 연동

3. onActivityResult를 통하여 값을 넘겨받음

 

입니다.

 

 

마지막으로 AndroidManifest 에다가

 

<activity android:name="com.facebook.LoginActivity" />

 

를 넣어주시면 되겠습니다.

 

마지막으로 onActivityResult 보시면

Log.d("birthday", "User:" + user.getBirthday());
이부분이 있는데 user에 따른 속성들이 있습니다. 확인해보시면 될듯해요.