Getting Started with the Facebook SDK for Android
원문 링크 : https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/
6. Create a new Android Project with Facebook Login Create a new project, link to the Facebook SDK; demonstrate Facebook Login and fetch the user's name |
이 스텝에서는 새로운 안드로이드 프로젝트를 만들고, Facebook SDK 를 사용해, facebook 앱을 통해 로그인 하는 과정을 진행합니다.
우선 프로젝트를 새로 만들어줍니다. 물론 안드로이드 프로젝트로요.
액티비티도 하나 만들어줍니다.
이제 다시 Developer site 로 갑니다. [Apps] 에서 [5] 스텝에서 만들었던, test app 에 정보를 추가할거에요.
방금 만든 프로젝트의 패키지, 액티비티의 정보를 입력해줍니다.
이번엔, 방금 만든 테스트 앱과 Facebook SDK 를 연결시켜줄거에요.
프로젝트의 [Properties] > [Android] 로 가서, Library 섹션의 [Add] 버튼을 눌러주세요.
그리고 아래 스크린 샷 처럼 FacebookSDK 를 추가해줍니다.
이번엔 res/values 에 있는 strings.xml 에 app id 를 추가해줍니다.
app id 는 [5] 스텝에서 Facebook developer site 에 등록한 앱 정보에서 확인할 수 있습니다.
이 app id 를 복사해 와서 strings.xml 에 추가를 해줍니다.
그리고 AndroidManifest.xml 의 meta 정보에 추가를 해줘야해요.
meta data 의 이름은 com.facebook.sdk.ApplicationId 로 해주고, value 에 @string/app_id 를 설정해줍니다.
AndroidManifest.xml 에 Facebook SDK 에 있는 LoginActivity 도 추가해줍니다.
클래스를 생성할 필요는 없고 가져다 쓰기만 할거라서 Manifest 에만 추가를 해주면 되요.
그리고 AndroidManifest.xml 의 퍼미션에 Internet 도 추가를 해줘야해요. 당연한 얘기지만 인터넷이 안되있으면, network communicate 를 못하는..
살짝 정리해보면... 이렇게 추가를 했어요.
res/values/strings.xml - <string name="app_id">409663295782902</string> AndroidManifest.xml - <uses-permission android:name="android.permission.INTERNET"/> -
- <activity android:name="com.facebook.LoginActivity"/> |
로그인이 제대로 되었는지를 출력하기 위해, TextView 에 id 를 지정해줍니다.
...
<TextView
android:id="@+id/welcome"
android:layout_width="wrap_content"
...
이제 MainActivity.java 에 코딩을 할 차례입니다.
실제 원문에서는 아래의 패키지나 클래스들을 import 하라고 나오는데... Command + Shift + O 로 해결하도록 하죠^^;
import com.facebook.*;
import com.facebook.model.*;
import android.widget.TextView;
import android.content.Intent;
Facebook 앱을 실행시키고 데이터를 받아올 것이므로, onActivityResult 메소드를 구현해줍니다.
이렇게 설명되어있네요.
Facebook SDK 의 중요한 부분은 Session 클래스입니다. Session 클래스는 사용자를 인증하고 권한을 부여의 과정을 관리합니다.
사용자에게 권한을 확인하고 앱을 전환하고 다시 이 액티비티로 돌아와서 active session 을 업데이트 할 수 있도록 onActivityResult 를 구현해주는거죠.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
(Session 및 Activity life cycle에 대한 포괄적인 구현은 sample app 에 되어있고, 설명은 Facebook Login guide 에 있습니다. 예를들어 당신이 캐싱 토큰, session resuming 같은 이점을 원한다면 말이죠.)
MainActivity 의 onCreate 메소드 끝 부분에, Session.openActiveSession 메소드를 추가합니다.
이 태스크는 세가지 argument 가 필요해요.
- Activity activity : 해당 Activity 에 대한 referenece
- boolean allowLoginUI : 로그인 UI 를 사용할것인지에 대한 플래그.
- SessionStatusCallback callback : 상태 변경이 일어나면 호출될 callback
(더 강력한 구현은 named instance 로 콜백을 만들 필요가 있지만, 이건 샘플앱이니 anonymous instance 를 사용합니다.)
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// start Facebook Login
Session.openActiveSession(this, true, new Session.StatusCallback() {
// callback when session changes state
@Override
public void call(Session session, SessionState state, Exception exception) {
}
});
}
callback 의 call 메소드는 여러번 호출 될 가능성이 있습니다. SessionState 가 그대로 넘어오고 있는 것을 보면 당연한거겠죠? (예를들어, session 이 OPENED 일때, OPENING 일때 등등..)
여기서는 사용자의 이름을 가져와서 환영 메시지를 업데이트 하고 싶은거죠.
그래서 call 메소드 안에서 세션이 열려있는지만 확인을 해봅니다.
if (session.isOpened()) {
}
이제 이 if 문 안에, Facebook Graph API 의 /me endpoint 에 리퀘스트를 만들고 유저 기본정보를 가져와 fetch 합니다.
Request 클래스는 executeMeRequestAsync 같은 common 한 요청을 만들고 실행하기 위한 편리한 몇가지 메소드를 제공합니다. executeMeRequestAsync 같은 메소드는 session 을 reference 로 가지고 있고, API call 이 완료 됐을 때에 대한 처리를 하기 위해, 우리가 작성한 코드가 담긴 다른 callback (반환될 사용자 데이터에 대한 strong-type의 콜백, 여기서는 Request.GraphUserCallback) 을 포함합니다.
// make request to the /me API
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
// callback after Graph API response with user object
@Override
public void onCompleted(GraphUser user, Response response) {
}
});
또다시, 이 콜백의 onComplete 메소드 안에, TextView label 을 user's name 으로 바꿔줄 간단한 코드를 작성해야죠.
if (user != null) {
TextView welcome = (TextView) findViewById(R.id.welcome);
welcome.setText("Hello " + user.getName() + "!");
}
이제 수정한 파일들을 저장하고, emulator 에 애플리케이션을 올려서 실행해봅니다.
만약 페이스북 앱에 로그인이 되어있다면, 즉시 Facebook login flow 가 시작될 거구요. 성공적으로 로그인을 하겠죠.
페이스북 앱에 로그인이 안되어있으면, 아래와 같이 페이스북 앱으로 전환 된 후, 로그인을 해줘야 할 거구요.
페이스북 앱이 설치되어 있지 않은 경우라면, modal web view dialog 를 사용합니다.
자 어쨋든! 이제 로그인 해서 기본정보(여기선 이름을 불러왔었죠.)를 불러오는 것까지 해보았습니다.
예전보다 한층 친절해진 페이스북 형들덕에 쉽게 할 수 있었네요.
아래는 Getting Started 에 있는 샘플 코드 중 MainActivity 의 코드입니다.
package com.firstandroidapp;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.widget.TextView;
import com.facebook.*;
import com.facebook.model.*;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// start Facebook Login
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.executeMeRequestAsync(session, new Request.GraphUserCallback() {
// callback after Graph API response with user object
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
TextView welcome = (TextView) findViewById(R.id.welcome);
welcome.setText("Hello " + user.getName() + "!");
}
}
});
}
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
}
작성한 프로젝트 + FacebookSDK 프로젝트 + Facebook 2.0.apk
7. Start Coding! That's it... now go and enhance one of the sample apps, work through the Scruptious Tutorial, and get creative |
이제 Getting Started 는 끝났구요. 코딩을 시작하면 됩니다.
스텝 7에는 이렇게 되어있군요.
이게 전부고, Scruptious tutorial 을 통해 샘플을 강화해보고, 창의력을 발휘하라고...
어쨋든 Facebook SDK 3.0 for Android 의 Getting Started 는 끝났습니다~ 짝짝짝.
'Android Tutorial > Facebook(페이스북)' 카테고리의 다른 글
[Scrumptious Tutorial] 1 - Authenticate (5) | 2013.01.21 |
---|---|
[Facebook] Scrumptious Tutorial (0) | 2013.01.21 |
[2] Getting Started with the Facebook SDK for Android (0) | 2013.01.16 |
[1] Getting Started with the Facebook SDK for Android (0) | 2013.01.15 |
What’s New in Facebook SDK 3.0 for Android (0) | 2013.01.15 |