Android SDK는 Facebook 그래프 API와의 통합을 지원합니다. GraphRequest
및 GraphResponse
클래스를 사용하여 비동기식으로 JSON에서 요청을 보내고 응답을 받을 수 있습니다. GraphRequestBatch
를 사용하면 Facebook 서버로의 라운드트립 한 번으로 여러 작업을 일괄 요청할 수도 있습니다.
그래프 API에 대한 자세한 내용은 다음을 참조하세요.
Android용 Facebook SDK를 사용하고 그래프 API를 호출하는 추가 이용 사례를 알아보려면 GraphRequest
, GraphResponse
및 GraphRequestBatch
참조도 확인하세요.
GraphRequest
클래스GraphRequest
클래스에는 /user/me 엔드포인트를 호출하여 지정된 액세스 토큰의 사용자 데이터를 가져오는 newMeRequest
메서드가 있습니다.
Android SDK에서는 access_token
에 지정된 앱의 모든 권한을 전송하고 이를 통해 데이터 액세스를 관리합니다. 앱에 사용 가능한 액세스 토큰이 없는 경우 그래프 API는 공개적으로 사용 가능한 정보만 반환합니다. User
특성 및 권한에 대한 자세한 내용은 그래프 API 참조의 User
섹션을 참조하세요.
기본적으로 newMeRequest
메서드를 통해 사용자 개체에서 기본 필드를 가져옵니다. 추가 필드가 필요하거나 성능상의 이유로 응답 페이로드를 줄이고 싶은 경우 다음과 같이 fields
매개변수를 추가하여 특정 필드를 요청할 수 있습니다.
GraphRequest request = GraphRequest.newMeRequest( accessToken, new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted( JSONObject object, GraphResponse response) { // Application code } }); Bundle parameters = new Bundle(); parameters.putString("fields", "id,name,link"); request.setParameters(parameters); request.executeAsync();
콜백 메서드에서, 요청이 성공하면 응답 데이터가 JSONObject
로 역직렬화됩니다. 권한이 없어서 가져올 수 없는 필드는 결과에서 생략됩니다.
로그인한 사용자의 경우 SDK에 Profile
과 ProfileTracker
클래스가 있으며 Android용 Facebook 로그인을 참조하세요.
액세스하는 데이터는 사용자가 앱에 부여한 권한 및 앱과 공유하도록 선택한 데이터에 따라 다릅니다. 다음은 user_location
및 user_birthday
의 그래프 API 원본 응답의 예제입니다.
{ "id": "12345678", "birthday": "1/1/1950", "first_name": "Chris", "gender": "male", "last_name": "Colm", "link": "http://www.facebook.com/12345678", "location": { "id": "110843418940484", "name": "Seattle, Washington" }, "locale": "en_US", "name": "Chris Colm", "timezone": -8, "updated_time": "2010-01-01T16:40:43+0000", "verified": true }
호출하는 엔드포인트에 따라 JSONObject
또는 JSONArray
가 수신됩니다.
newMeRequest
같은 단일 개체 호출은 JSONObject
를 반환합니다. newMyFriendsRequest
와 같이 여러 결과를 호출하면 JSONArray
가 반환됩니다.
GraphResponse
개체의 오류 필드를 검사하여 요청 실패 여부를 확인할 수 있습니다. 오류 필드는 FacebookRequestError
유형입니다. 호출할 수 있는 메서드는 다음과 같습니다.
오류 개체에는 오류에 대한 상세 정보를 설명하는 다음과 같은 필드가 있습니다.
error code
,sub error code
error message
user facing error message
가능한 오류 코드에 대한 자세한 내용은 그래프 API 사용의 오류 처리를 참조하세요.
GraphResponse
개체에는 오류를 분류하는 enum
도 있습니다. 오류는 다음과 같이 세 가지로 분류할 수 있습니다.
LOGIN_RECOVERABLE
- 사용자가 다시 로그인해야 하는 문제가 있습니다. 앱에서 GraphResponse
개체 및 액티비티 또는 프래그먼트를 사용하여 LoginManager
의 resolveError
를 호출할 수 있습니다. 그러면 Facebook 로그인 UI가 트리거되며, 로그인에 성공하도록 프래그먼트나 액티비티를 호출하여 CallbackManager
를 구현해야 합니다.TRANSIENT
- 일시적인 문제가 발생했음을 나타내며, 앱에서 요청을 재시도할 수 있습니다.OTHER
- 일반적인 문제가 발생했음을 나타내며, error code
및 sub error code
를 검사하여 자세한 내용을 확인할 수 있습니다.사용자 데이터를 가져오는 데 문제가 있으면, 앱에서 사용자 데이터를 요청하기 전에 이 코드를 추가하여 HTTP 요청 로깅을 활성화하세요.
FacebookSdk.addLoggingBehavior(LoggingBehavior.REQUESTS);
그러면 HTTP 요청 및 응답에 대한 상세 정보를 콘솔 로그에 로깅합니다.
앱에서 다음과 같은 유형의 시나리오를 처리하는 경우 데이터를 일괄 처리를 요청해야 합니다.
서버 라운드트립의 양을 줄이려면 일괄 처리 요청을 사용할 수 있습니다. 예를 들어, 사용자와 친구를 가져옵니다.
GraphRequestBatch batch = new GraphRequestBatch( GraphRequest.newMeRequest( access_token, new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted( JSONObject jsonObject, GraphResponse response) { // Application code for user } }), GraphRequest.newMyFriendsRequest( access_token, new GraphRequest.GraphJSONArrayCallback() { @Override public void onCompleted( JSONArray jsonArray, GraphResponse response) { // Application code for users friends } }) ); batch.addCallback(new GraphRequestBatch.Callback() { @Override public void onBatchCompleted(GraphRequestBatch graphRequests) { // Application code for when the batch finishes } }); batch.executeAsync();
위의 예에서는 일괄 처리 요청을 비동기식 호출로 표시합니다. 코드가 백그라운드 스레드에 있으며 호출이 완료될 때까지 이 스레드를 차단하려면 batch.executeAndWait()
를 호출할 수 있습니다.
User
- 그래프 API 사용자 참조GraphRequestBatch
- GraphRequestBatch
에 대한 참조 GraphRequest
- GraphRequest
에 대한 참조