ひどいです。ちゃんと処理しないなら 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
- <!--xml version="1.0" encoding="utf-8"?-->
- <resources>
- <string name="app_id">APP_ID</string>
- </resources>
- <?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 <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | 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 件のコメント:
コメントを投稿