Edited at

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

More than 3 years have passed since last update.


はじめに

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

下図のようにappと同じ階層にlibrariesディレクトリを作成し、facebookディレクトリを追加します。

481916e5-1f0d-8806-d6ce-4b072ec778db.png


③settings.gradleを編集

下記図のようにsettings.gradleを編集します。

settings_gradle_-__pasti__-_pasti_-____AndroidStudioProjects_pasti_.png


settings.gradle

include ':app', ':libraries:facebook'



④build.gradleを編集

下記図のようにbuild.gradleを編集します。

app_build_gradle_-__app__-_droidKaigi_-____AndroidStudioProjects_droidKaigi_.png


build.gradle

compile project(':libraries:facebook')



⑤gradle.propertiesを編集

下記図のようにgradle.propertiesを編集します。

05243716-691a-25c9-0154-361c21f84d8a.png


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


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は自分の環境にあわせてください)


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の編集


AndroidManifest.xml

<!--権限の追加-->

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


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の編集


Strings.xml

 <!--任意のidに変更してください-->

<string name="facebook_id">000000000000000</string>

これで準備が整いました!

import等で正常にFacebookSDKがインポート出来ているか確認してください。


⑩Facebookでシェアする

あと少しです!

下記のようにonClick等にFacebookSDKにIntentを投げてあげればFacebookSDKが起動します。


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…以外と入れるのに苦労しました…

この記事が少しでも参考になれば幸いで御座います!