AndroidでFacebookのウォールに投稿を行う


以前本サイトにて、Facebookへのログイン認証を行う方法についての記事を書きました。

今回は、ログイン認証した後に投稿を行う方法について解説したいと思います。
今回解説に使用するサンプルアプリは、Post!ボタンを押下することで、TextViewに入力された文字列をウォールに投稿するシンプルなものです。

ポイントは、AsyncFacebookRunnerクラスrequest()メソッドの利用方法です。
request()メソッドを解説するに当たっては、Facebook APIの肝となるGraph APIについて多少なりとも理解しておく必要があるため、Graph APIについても解説中で簡単に触れています。

それでは続きからどうぞ

Facebookへの投稿を行う

Facebook Android SDK を用いてウォールへの投稿を行う際には、主に次のものが必要です。

  1. ログイン認証済のFacebookクラスのインスタンス
  2. AsyncFacebookRunnerクラスのインスタンス
  3. AsyncFacebookRunnerクラスのRequestListener()インターフェースをimplementsしたクラス

上記1.については、「AndroidでFacebookの認証を行う(実装編)」でも解説しましたが、今回も再度簡単に触れておきます。

それでは早速ソースコードを見てみましょう。

FbSampleActivity.java

public class PostActivity extends Activity {

	private static final String ApiKey = ;
	private Facebook facebook = null;
	private AsyncFacebookRunner asyncFbRunner = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.post);
        facebook = new Facebook(ApiKey);
        asyncFbRunner = new AsyncFacebookRunner(facebook);

        final TextView postText = (TextView)findViewById(R.id.PostField);
        Button postBtn = (Button)findViewById(R.id.PostButton);
        postBtn.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
					facebook.authorize(FbSampleActivity.this
							, new String[] {"publish_stream"}
							, new DialogListener(){

					@Override
					public void onComplete(Bundle values) {
						CharSequence postStr = postText.getText();
						Bundle params = new Bundle();
						params.putString("message",postStr.toString());
				        	asyncFbRunner.request("me/feed",params,"POST", new PostRequestListener(), null);
					}

					@Override
					public void onFacebookError(FacebookError e) {

					}

					@Override
					public void onError(DialogError e) {

					}

					@Override
					public void onCancel() {

					}
				});
			}
        });
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        facebook.authorizeCallback(requestCode, resultCode, data);
    }
}

まず12行目で、APIキーを引数にFacebookのインスタンスを生成しています。
※APIキーの取得方法については「 AndroidでFacebookの認証を行う(準備編)」を参考にしてください。
ボタンが押されたタイミングで、20行目でFacebookクラスの authorize()メソッドを用いて認証を行います。認証に成功した場合は DialogListenerクラスのonComplete()メソッド内の処理が走ります。
ここまでは、「 AndroidでFacebookの認証を行う(実装編)」でも解説していますので、詳しくはそちらを参考にしてみてください。
13行目で、Facebookクラスのインスタンスを引数にAsyncFacebookRunnerクラスのインスタンスを生成しています。後にウォールへの投稿で使用するクラスです。
次に、onComplete()メソッド内にて、実際に投稿を行うための処理を行います。
24行目で、まずはTextViewに入力された文字列を取得しています。
25行目と26行目で、取得した文字列をString型に変換し、Bundleクラスに保持しています。Bundeクラスは、キーと値の組み合わせ(マップ)としてインスタンスを一時的に保持してくれるクラスです。
次に27行目で、AsyncFacebookRunnerクラスのrequest()メソッドを使ってウォールへの投稿を行っています
request()メソッドに渡している各種引数は下記表の通りです。
[table “251” not found /]

ここで、第1引数にてGraph APIという言葉が出てきています。
Facebook APIは、Facebookの各種機能を利用するために用意されたAPI群の総称のようなもので、その中でもGraph APIは、情報の取得やウォールへの投稿など、重要な役割を持ったAPIが定義されています。
Graph APIでは、「https://graph.facebook.com/」をルートとしたURLでFacebookへアクセスし、ログインユーザーの各種情報を取得したり、ウォールへの投稿を行います。
Facebook Android SDKでは、このURLでのアクセスを、クラスやメソッドでアクセスできるようにラッピングすることで、実装しやすくしています。
第1引数では、このGraph APIへアクセスするためのURLの「https://graph.facebook.com/」の後に続くURLを文字列として指定しています。
今回は、Graph APIのウォールへの投稿機能を利用するため、“me/feed”というURLを付加します(「https://graph.facebook.com/me/feed…」という風になります)。
※詳細はGraph API公式ドキュメントを参考にしてください。

第4引数には、AsyncFacebookRunnerクラスのRequestListener()インターフェースをimplementsしたPostRequestListenerクラスのインスタンスを指定しています。
PostRequestListenerクラスは以下のように定義しています。

PostRequestListener.java

public class PostRequestListener implements AsyncFacebookRunner.RequestListener{
	@Override
	public void onIOException(IOException e, Object state) {
		// ネットワークエラー時に呼ばれる
	}

	@Override
	public void onFileNotFoundException(FileNotFoundException e, Object state) {
		// 存在しないリソースにアクセスしようとした場合に呼ばれる
	}

	@Override
	public void onMalformedURLException(MalformedURLException e, Object state) {
		// リクエストされたURLが無効だった場合に呼ばれる
	}

	@Override
	public void onFacebookError(FacebookError e, Object state) {
		// Facebook側でのエラー発生時に呼ばれる
	}

	@Override
	public void onComplete(String response, Object state) {
		// requestに対してresponseが返された場合に呼ばれる
	}
}

クラス内に定義されている各種メソッドは、RequestListener()インターフェースにて定義されているメソッドで、すべて定義しておく必要がありますが、ここでは中身の処理は必要ないため記述していません。コメントを参考に、必要な場合は利用する形で構いません。

さて、上記の通り処理を行うと、Post!ボタンを押下することで、下図のようにウォールへの投稿が行われます。

下図のように投稿されます。

以上でウォールへの投稿は完了です!

2 Comments