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作成/登録も忘れずに。