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