2013年11月19日火曜日

Android Facebook SDK で share する

Facebook アプリは ACTION_SEND を受けとるくせに、Facebook に投稿してくれません。
ひどいです。ちゃんと処理しないなら 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
  1. <!--xml version="1.0" encoding="utf-8"?-->  
  2. <resources>  
  3.     <string name="app_id">APP_ID</string>  
  4. </resources>  
AndroidManifest.xml
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >  
  3.   
  4.     ...  
  5.   
  6.     <application ... >  
  7.   
  8.         ...  
  9.   
  10.         <meta-data   
  11.             android:value="@string/app_id"   
  12.             android:name="com.facebook.sdk.ApplicationId"/>  
  13.     </application>  
  14.   
  15. </manifest>  


7. FacebookSDK のライブラリプロジェクトを追加する





8. Activity に Share を実装する

ShareDialogBuilder を使う
  1. public class MainActivity extends Activity {  
  2.   
  3.     private UiLifecycleHelper uiHelper;  
  4.   
  5.     @Override  
  6.     protected void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.activity_main);  
  9.   
  10.         uiHelper = new UiLifecycleHelper(thisnew Session.StatusCallback() {  
  11.               
  12.             @Override  
  13.             public void call(Session session, SessionState state, Exception exception) {  
  14.                 Log.i("Activity""SessionState : " + state);  
  15.             }  
  16.         });  
  17.         uiHelper.onCreate(savedInstanceState);  
  18.   
  19.         findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {  
  20.   
  21.             @Override  
  22.             public void onClick(View v) {  
  23.                 share();  
  24.             }  
  25.         });  
  26.     }  
  27.   
  28.     private void share() {  
  29.         if (FacebookDialog.canPresentShareDialog(getApplicationContext(),  
  30.                 FacebookDialog.ShareDialogFeature.SHARE_DIALOG)) {  
  31.             try {  
  32.                 String name = "名前";  
  33.                 String url = "http://developer.android.com";  
  34.                 String description = "詳細";  
  35.   
  36.                 // Fragment で発行するときは setFragment() を呼ぶ  
  37.                 FacebookDialog shareDialog = new FacebookDialog.ShareDialogBuilder(this).setDescription(description)  
  38.                         .setName(name).setLink(url).build();  
  39.                 uiHelper.trackPendingDialogCall(shareDialog.present());  
  40.             } catch (FacebookException e) {  
  41.                 Toast.makeText(this"Facebook でエラーが発生しました。", Toast.LENGTH_SHORT).show();  
  42.             }  
  43.         }  
  44.     }  
  45.   
  46.     @Override  
  47.     protected void onResume() {  
  48.         super.onResume();  
  49.         uiHelper.onResume();  
  50.     }  
  51.   
  52.     @Override  
  53.     protected void onSaveInstanceState(Bundle outState) {  
  54.         super.onSaveInstanceState(outState);  
  55.         uiHelper.onSaveInstanceState(outState);  
  56.     }  
  57.   
  58.     @Override  
  59.     public void onPause() {  
  60.         super.onPause();  
  61.         uiHelper.onPause();  
  62.     }  
  63.   
  64.     @Override  
  65.     public void onDestroy() {  
  66.         super.onDestroy();  
  67.         uiHelper.onDestroy();  
  68.     }  
  69.   
  70.     @Override  
  71.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  72.         super.onActivityResult(requestCode, resultCode, data);  
  73.   
  74.         uiHelper.onActivityResult(requestCode, resultCode, data, new FacebookDialog.Callback() {  
  75.             @Override  
  76.             public void onError(FacebookDialog.PendingCall pendingCall, Exception error, Bundle data) {  
  77.                 Log.e("Activity", String.format("Error: %s", error.toString()));  
  78.             }  
  79.   
  80.             @Override  
  81.             public void onComplete(FacebookDialog.PendingCall pendingCall, Bundle data) {  
  82.                 Log.i("Activity""Success!");  
  83.             }  
  84.         });  
  85.     }  
  86. }  




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 にする







参考



0 件のコメント:

コメントを投稿