Facebook Android SDKを使用してGraph APIにアクセスすると、Facebook上の友人一覧を取得することができる。
友人一覧以外にも、投稿内容やアルバムの取得にもGraph APIを使用する。
- Graph APIへのアクセスにはAsyncFacebookRunnerクラスのrequestメソッドを使用する。
- 友人情報を取得するためのリクエストは「me/friends」。
- requestメソッドの応答はJSON形式となる。
認証については、
こちらも参照のこと。
package net.kuttya.facebooksample;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import com.facebook.android.AsyncFacebookRunner;
import com.facebook.android.AsyncFacebookRunner.RequestListener;
import com.facebook.android.DialogError;
import com.facebook.android.Facebook;
import com.facebook.android.Facebook.DialogListener;
import com.facebook.android.FacebookError;
public class FacebookSdkSampleActivity extends Activity {
private final String API_KEY = "登録したAPP ID"; // Facebookに登録したAppID
private Facebook facebook;
private AsyncFacebookRunner runner;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
// ログインボタン押下処理
public void clickEventLogin(View v) {
// 認証実施
if(facebook == null) {
facebook = new Facebook(API_KEY);
}
facebook.authorize(this, new DialogListener() {
public void onComplete(Bundle values) {
// 認証成功
runner = new AsyncFacebookRunner(facebook);
// 「me/friends」とリクエストすることで、友人情報を取得する
runner.request("me", new RequestListener(){
public void onComplete(String response, Object state) {
// リクエスト成功
// responseを処理する
// responseはJSON形式となっている
}
public void onIOException(IOException e, Object state) {
// ネットワークエラー
Toast.makeText(FacebookSdkSampleActivity.this, "リクエスト失敗\n(ネットワークエラー)", Toast.LENGTH_SHORT).show();
}
public void onFileNotFoundException(FileNotFoundException e, Object state) {
// 存在しないリソースへのアクセスが発生
Toast.makeText(FacebookSdkSampleActivity.this, "リクエスト失敗\n(存在しないリソースへのアクセスが発生)", Toast.LENGTH_SHORT).show();
}
public void onMalformedURLException(MalformedURLException e, Object state) {
// リクエストが無効
Toast.makeText(FacebookSdkSampleActivity.this, "リクエスト失敗\n(リクエストが無効)", Toast.LENGTH_SHORT).show();
}
public void onFacebookError(FacebookError e, Object state) {
// Facebook側でのエラー
Toast.makeText(FacebookSdkSampleActivity.this, "リクエスト失敗\n(Facebook側エラー)", Toast.LENGTH_SHORT).show();
}
});
}
public void onFacebookError(FacebookError e) {
// Facebook側エラー
Toast.makeText(FacebookSdkSampleActivity.this, "ログイン失敗\n(Facebook側エラー)", Toast.LENGTH_SHORT).show();
}
public void onError(DialogError e) {
// 端末側エラー
Toast.makeText(FacebookSdkSampleActivity.this, "ログイン失敗\n(端末側エラー)", Toast.LENGTH_SHORT).show();
}
public void onCancel() {
// キャンセル
Toast.makeText(FacebookSdkSampleActivity.this, "ログイン失敗\n(キャンセル)", Toast.LENGTH_SHORT).show();
}
});
}
// ログアウトボタン押下処理
public void clickEventLogout(View v) {
try {
if(facebook != null) {
facebook.logout(this);
facebook = null;
// ログアウト成功
Toast.makeText(FacebookSdkSampleActivity.this, "ログアウト成功", Toast.LENGTH_SHORT).show();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
facebook.authorizeCallback(requestCode, resultCode, data);
}
}
マニフェストファイルに下記のパーミッションを追加する。
レイアウトとして、main.xmlにログイン用ボタン、ログアウト用ボタンを設置する。
ボタン押下で、クリックイベントを発生させる。