이번에는 페이스북 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에 따른 속성들이 있습니다. 확인해보시면 될듯해요.