AndroidStudio×FacebookSDK。SDKの導入からシェアの実装までコピペで出来るようにまとめてみました。

#はじめに
Android開発でFacebookSDKを使う機会があったので、まとめました。
結構ハマっていろいろな記事を参考にさせて頂きました！！
基本的に下記をそのまま（コピペ）やれば動くようになっています！

それでは早速やってみましょう！

#使用環境
・AndroidStudio v1.1.0
・FacebookSDK v3


#①FacebookSDKのダウンロード
下記URLからFacebookSDKをダウンロード
https://developers.facebook.com/docs/android/downloads

今回はFacebookSDK 3.x.xをダウンロードします。

#②FacebookSDKをインポート

①でダウンロードしたファイルを
![_Users_kakizaki_shoichi_Downloads_facebook-android-sdk-4_0_0.png](https://qiita-image-store.s3.amazonaws.com/0/49347/1813aa56-662f-3f93-5172-cf8261ed6288.png)


下図のようにappと同じ階層にlibrariesディレクトリを作成し、facebookディレクトリを追加します。
![481916e5-1f0d-8806-d6ce-4b072ec778db.png](https://qiita-image-store.s3.amazonaws.com/0/49347/778cb587-35d0-76d2-537c-32afb82e6f93.png)


#③settings.gradleを編集

下記図のようにsettings.gradleを編集します。
![settings_gradle_-__pasti__-_pasti_-____AndroidStudioProjects_pasti_.png](https://qiita-image-store.s3.amazonaws.com/0/49347/107fb77f-c3c3-d9d0-4e7d-cf321f0a8780.png)




```gradle:settings.gradle
include ':app', ':libraries:facebook'
```

#④build.gradleを編集
下記図のようにbuild.gradleを編集します。
![app_build_gradle_-__app__-_droidKaigi_-____AndroidStudioProjects_droidKaigi_.png](https://qiita-image-store.s3.amazonaws.com/0/49347/d1f9c7a1-d24d-71e3-bd0e-69edce1e2c38.png)

```gradle:build.gradle
compile project(':libraries:facebook')
```

#⑤gradle.propertiesを編集
下記図のようにgradle.propertiesを編集します。
![05243716-691a-25c9-0154-361c21f84d8a.png](https://qiita-image-store.s3.amazonaws.com/0/49347/ee2900e8-7dc2-f54e-3e60-3b5e2ee00225.png)

```gradle:gradle.properties
# 開発環境に合わせてください
ANDROID_BUILD_SDK_VERSION=21
ANDROID_BUILD_TOOLS_VERSION=21.1.2
ANDROID_BUILD_MIN_SDK_VERSION=9
ANDROID_BUILD_TARGET_SDK_VERSION=21
```

（作成中の開発環境は④で編集したbuild.gradleに記述してあります）

#⑥build.gradle(Facebookディレクトリ内)を編集
下記図のようにbuild.gradleを編集します。
(classpath += project.files(android.getBootClasspath().join(File.pathSeparator))は消してください)

![facebook_build_gradle_-__facebook__-_pasti_-____AndroidStudioProjects_pasti_.png](https://qiita-image-store.s3.amazonaws.com/0/49347/85a39dec-557c-b016-5ad9-d20906e1fb14.png)

``````gradle:Facebook/build.gradle
-    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
+    ext.androidJar = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
+    classpath += files(ext.androidJar)
```


#⑦FacebookShareActivityの作成
下記をコピペして任意の場所に設置してください！（packageは自分の環境にあわせてください）

```java:FacebookShareActivity.java
package com.example.hogehoge;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import com.facebook.*;
import com.facebook.widget.FacebookDialog;

public class FacebookShareActivity extends  Activity {

    private UiLifecycleHelper uiHelper;


    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        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);

        share();
    }

    private void share() {
        Intent intent = getIntent();

        if (FacebookDialog.canPresentShareDialog(getApplicationContext(),
                FacebookDialog.ShareDialogFeature.SHARE_DIALOG)) {
            try {
                String name = intent.getStringExtra("NAME");
                String url = intent.getStringExtra("URL");
                String description = intent.getStringExtra("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!");
                finish();
            }
        });
    }
}
```

#⑧Androidmanifest.xmlの編集

```xml:AndroidManifest.xml
<!--権限の追加-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
```

```xml:AndroidManifest.xml
<!--<application ~ </application>内に追加-->
<meta-data
  android:name="com.facebook.sdk.ApplicationId"
  android:value="@string/facebook_id" />

<activity
  android:name="com.example.hogehoge.FacebookShareActivity"
  android:label="FacebookShareActivity" >
</activity>

```

#⑨Strings.xmlの編集

```xml:Strings.xml
 <!--任意のidに変更してください-->
  <string name="facebook_id">000000000000000</string>
```

これで準備が整いました！
import等で正常にFacebookSDKがインポート出来ているか確認してください。

#⑩Facebookでシェアする
あと少しです！
下記のようにonClick等にFacebookSDKにIntentを投げてあげればFacebookSDKが起動します。

```java:MainActivity.java

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;

import com.example.hogehoge.FacebookShareActivity;

public class MainActivity extends Activity{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        findViewById(R.id.btn_click).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
             	Intent facebookIntent = new Intent(context, FacebookShareActivity.class);
            	facebookIntent.putExtra("NAME", name);
            	facebookIntent.putExtra("URL", url);
            	facebookIntent.putExtra("DESCRIPTION", description);
            	context.startActivity(facebookIntent);
            }
        });
    }
}
```

以上となります！
FacebookSDK…以外と入れるのに苦労しました…
この記事が少しでも参考になれば幸いで御座います！