ひどいです。ちゃんと処理しないなら ACTION_SEND 受け取らないでほしいです。。。
Facebook に投稿したければ Facebook SDK 使えよ、ということだそうです。
でもドキュメントがわちゃーでわかりにくかったので、自分ためにメモっておきます。
1. Facebook Apps を作る
https://developers.facebook.com/apps

右上の + Create New App から

2. Debug key の key hash を登録する
Debug key のパスワードは android
$[ keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
Enter keystore password: android
pnw+gKvPF3Y+pP9nbguTOPw3s1g=

3. Facebook SDK for Android をダウンロードして展開する
https://developers.facebook.com/docs/android/
現在は v3.5.2
4. facebook-android-sdk-3.5.2/facebook/ を指定してインポートする
FacebookSDK の libs に含まれる android-support-v4.jar が古いので、新しいので上書きする。
5. 1.で指定したパッケージ名のアプリと Activity を作る

6. App ID を AndroidManifest.xml に宣言する
res/values/strings.xml
APP_ID AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" ... > ... <application ... > ... <meta-data android:value="@string/app_id" android:name="com.facebook.sdk.ApplicationId"/> </application> </manifest> 7. FacebookSDK のライブラリプロジェクトを追加する
8. Activity に Share を実装する
ShareDialogBuilder を使う
public class MainActivity extends Activity { private UiLifecycleHelper uiHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); uiHelper = new UiLifecycleHelper(this, new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { Log.i("Activity", "SessionState : " + state); } }); uiHelper.onCreate(savedInstanceState); findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { share(); } }); } private void share() { if (FacebookDialog.canPresentShareDialog(getApplicationContext(), FacebookDialog.ShareDialogFeature.SHARE_DIALOG)) { try { String name = "名前"; String url = "http://developer.android.com"; String description = "詳細"; // Fragment で発行するときは setFragment() を呼ぶ FacebookDialog shareDialog = new FacebookDialog.ShareDialogBuilder(this).setDescription(description) .setName(name).setLink(url).build(); uiHelper.trackPendingDialogCall(shareDialog.present()); } catch (FacebookException e) { Toast.makeText(this, "Facebook でエラーが発生しました。", Toast.LENGTH_SHORT).show(); } } } @Override protected void onResume() { super.onResume(); uiHelper.onResume(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); uiHelper.onSaveInstanceState(outState); } @Override public void onPause() { super.onPause(); uiHelper.onPause(); } @Override public void onDestroy() { super.onDestroy(); uiHelper.onDestroy(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); uiHelper.onActivityResult(requestCode, resultCode, data, new FacebookDialog.Callback() { @Override public void onError(FacebookDialog.PendingCall pendingCall, Exception error, Bundle data) { Log.e("Activity", String.format("Error: %s", error.toString())); } @Override public void onComplete(FacebookDialog.PendingCall pendingCall, Bundle data) { Log.i("Activity", "Success!"); } }); } }
9. Release Key の key hash を登録する
keytool -exportcert -alias-keystore | openssl sha1 -binary | openssl base64
10. Facebook Apps の設定の Sandbox Mode を Disabled にする

参考
- https://developers.facebook.com/docs/android/getting-started/
- https://developers.facebook.com/docs/android/share-dialog/
- https://developers.facebook.com/docs/reference/android/current/FacebookDialog.ShareDialogBuilder
- https://developers.facebook.com/docs/android/
0 comments:
Post a Comment