Facebook Android SDKで認証してPostする際のポイント

DroidNPをFacebookに対応させました。
その際のハマりポイントをメモしておきます。
要は、Facebook Android SDKで認証してPostする際のポイントです。
かなり雑な内容ですが。。。



■Facebook Android SDKのDLとimport
https://github.com/facebook/facebook-android-sdk
からDL。
"facebook"ディレクトリをeclipseでimport。
自分のプロジェクトを右クリック。
properties > Android > Library > Add...
にてimportしたプロジェクト(デフォルトだと"com_facebook_android")を選択。OKを押す。



■認証で使用したメソッド
--
com.facebook.android.Facebook.authorize(
	Activity activity,
	String[] permissions,
	int activityCode,
	DialogListener listener)
--

* activity
Contextをキャストしても良いっぽい。
(XxxActivity)getContext()みたいな感じ。

* permissions
"offline_access"と"publish_stream"を指定。
offline_accessは認証tokenの期限切れを防ぐ為。
publish_streamはウォールへの書き込み権限。

* activityCode
startActivityForResultに渡すrequestCodeのようなもの。後述。

* listener
後述。



■認証後の処理
(A) Facebook公式アプリが端末にインストールされている場合
onActivityResultに戻るので、前述のactivityCode == requestCodeの時に専用の処理を書く。

--Java(onActivityResultにて)--
switch (requestCode) {
case REQUEST_CODE_FACEBOOK_OAUTH:
	String token = data.getExtras().getString(Facebook.TOKEN);
	// TODO: tokenの保存等。
	break;
default:
	break;

}
--


(B) Facebook公式アプリが端末にインストールされていない場合

--Java(Facebook.DialogListener)--
@Override
public void onFacebookError(FacebookError e) {
	// TODO:
}

@Override
public void onError(DialogError e) {
	// TODO:
}

@Override
public void onComplete(Bundle values) {
	String token = values.getString(Facebook.TOKEN);
	// TODO: tokenの保存等。
}

@Override
public void onCancel() {
	// TODO:
}
--



■認証サンプルソース
--Java--
Facebook facebook = new Facebook("[Facebookで登録したアプリのID]");
facebook.authorize(
		(XxxActivity)getContext(),
		new String[] {"offline_access","publish_stream"},
		1,
		new Facebook.DialogListener() {
	@Override
	public void onFacebookError(FacebookError e) {
		// TODO:
	}

	@Override
	public void onError(DialogError e) {
		// TODO:
	}

	@Override
	public void onComplete(Bundle values) {
		String token = values.getString(Facebook.TOKEN);
		// TODO: tokenの保存等。onActivityResultも忘れずに。(この場合、requestCodeは1。)
	}

	@Override
	public void onCancel() {
		// TODO:
	}
});
--



■認証後のサンプル
--Java--
private void setFacebookSettings(String token){
	Facebook facebook = new Facebook("[Facebookで登録したアプリのID]");
	facebook.setAccessToken(token);

	try {
		String response = facebook.request("me");
		JSONObject json;
		try {
			json = new JSONObject(response);
			String name = json.get("name").toString();
			String id = json.get("id").toString();

			// TODO: nameやidをSharedPreferencesに保存する。等。
		} catch (JSONException e) {
			// TODO:
		}
	} catch (MalformedURLException e) {
		// TODO:
	} catch (IOException e) {
		// TODO:
	}
}
--



■その他
Facebook側の話。
Android Marketでの公開を前提としている場合、開発用のkey hash登録と併せて
Android Market用のAPK作成時に使用するkeystoreでのkey hash作成/登録も忘れずに。

  1. mamor-blog posted this
blog comments powered by Disqus
About Me

【description】

mamorのブログです。
自分の記事を書きます。
フォローはこのブログからはできません。

【internal link】

【external link】

【search by Google】

【Twitter】

【tag】