2012年6月24日日曜日

android:Facebook Android SDK(3:友人一覧を取得)

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にログイン用ボタン、ログアウト用ボタンを設置する。 ボタン押下で、クリックイベントを発生させる。

    

にほんブログ村 IT技術ブログ Androidアプリ開発へ

0 件のコメント:

コメントを投稿