ひどいです。ちゃんと処理しないなら 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 <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 件のコメント:
コメントを投稿