友人一覧以外にも、投稿内容やアルバムの取得にも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にログイン用ボタン、ログアウト用ボタンを設置する。 ボタン押下で、クリックイベントを発生させる。
0 件のコメント:
コメントを投稿