【殴り書き】FacebookにログインせずにFB Messengerにいろいろ送信しよう for Android

# 初めに
そもそも何をするために作ったかというと、各種SNSを利用して友達招待をする機能を作って。とのことで、作りました。まぁLINEやらTwitterやらは、URLスキーマ使えば秒殺ですぐ終わったんですが、このFacebook Messengerは曲者・・・。だいたい、FacebookはURLスキームがあるのはあるけどアプリの起動ぐらいしかできないのでFacebookSDKを使わないといけないけど、UnitySDKにはログインせずにmessengerにテキスト送る方法があるのかないのか、探し出せず・・。それにアプリ内で友達招待する為だけにFacebookにわざわざログインさせてーとくやってたら間違いなく利用されないのでLINEのようにアプリにログインできてればテキスト送れるようにしました。

# 結果を先に言うと、
以下の項目を指定してメッセージを送れるようになりました。

 * タイトル
 * 内容文
 * 小さく表示するイメージ
 * クリック後のURL


# 1. facebook sdk のimport  
## Facebook SDK for Androidのimport  

ディベロッパーサイト( https://developers.facebook.com/docs/android/downloads )から最新のSDK(zipファイル)をダウンロードする。今日現在(2015/05/12)の最新は4.1.1。
ダウンロードしたら、解凍しておく。

ディベロッパーサイトの導入手順は全てAndroid Studioをベースに書かれているが、個人的にElipseのほうがやりやすいのでこっちで。

Eclipseを開き、『ファイル』 → 『インポート(I)...』
![2-1.PNG](https://qiita-image-store.s3.amazonaws.com/0/41763/8eb7ac51-17af-d86b-c86e-d059fda66e96.png)

Androidの『Existing Android Code Into Workspace』を選択。
![625519d7-803b-1b7f-cd67-64ce512d1f7c.png](https://qiita-image-store.s3.amazonaws.com/0/41763/d442acf5-b644-ca08-fed8-5be749a23468.png)


サンプルとかはいらないので、Facebookプロジェクトだけを選択。

Importが完了すると左側の「パッケージ・エクスプローラー」にfacebookプロジェクトが出来る。
バージョン毎に名前が同じなので、名前は適当に変えることをお勧めする（facebook4.1.1とか）

## ここからはちょっと必要かどうかわかんないけど一応。
自分はFacebookSDK for Androidをjarにして自分のプロジェクトにいれたので(善し悪しは別にしてｗ)その辺の設定方法を書いておきます(ダレトク？)

「パッケージ・エクスプローラー」の『facebook4.1.1』プロジェクト上で右クリック　→　『プロパティー(R)』
![2-3.PNG](https://qiita-image-store.s3.amazonaws.com/0/41763/4ce6d8c6-93ca-ca49-f48e-e977633b29ae.png)

jarライブラリーとして使うので、『Android』タブの下の「ライブラリー」にチェック。

![2-4.PNG](https://qiita-image-store.s3.amazonaws.com/0/41763/bf8c48af-647b-7add-bd02-f988b728c39c.png)

『JAVAコンパイラー』タブの「コンパイラー準拠レベル」が1.7以上。

facebook4.1.1プロジェクトの直下のlibsフォルダ(なければ作る)に以下のファイルをコピーする。

android-support-v4.jarは、android-sdks/extra/android/support/v4/android-support-v4.jarにある。(android-sdksはAndroidSDKのインストールしたフォルダ)
bolts-android-1.1.2.jarは落としてくる。

※必要なファイルがなかったら、ここから落としてくる。
https://github.com/Wizcorp/phonegap-facebook-plugin/tree/master/platforms/android/FacebookLib/libs

ここまで設定できたら、たぶん、たぶん、、できるので、ビルドしてみる。
右クリック　→　『プロジェクトのビルド(B)』

# 2.  FacebookSDKをいじるプロジェクトの作成
新規でプロジェクト作ります。
![5efbeb6d-6129-aa0c-048e-554842299928.png](https://qiita-image-store.s3.amazonaws.com/0/41763/dc06c21b-e9b6-f09d-78a7-e2e79006c912.png)

最小必須SDKはAPI 14以上です。

いろいろ設定します。

「パッケージ・エクスプローラー」の『自作プロジェクト名』プロジェクト上で右クリック　→　『プロパティー(R)』
![1-3.PNG](https://qiita-image-store.s3.amazonaws.com/0/41763/ac4e5f9e-0aa0-d1bc-32bc-983cf1ac9c0c.png)
Javaコンパイラータブのコンパイラー準拠レベルは1.7以上を指定

![591245cd-5c60-811b-bd83-2fb2c0d7af02.png](https://qiita-image-store.s3.amazonaws.com/0/41763/945d16a4-305a-72f2-75c6-b8b991fcb6cf.png)

Androidタブで、下のほうの「ライブラリー」のチェックをする。
ビルド時に使用するライブラリー（プロジェクト）を追加するので、右の『追加...』を押す。

さっきいれたFacebookSDKのライブラリがあるのでそれを選択。

***もし警告とかエラーが消えなければ、Eclipseの再起動をお勧めします。***
結構な確立で解決します。

# 3.　実装する
Facebook SDKをいじるほうのプロジェクトに実装していきます。
説明はすっとばしてソース貼ります。眺めてみてくださいー

まず、Facebook Messengerをラップ(?)したクラスです。

```java:FbMessenger.java
import android.app.Application;
import android.content.Context;
import android.net.Uri;

import com.facebook.FacebookSdk;
import com.facebook.share.model.ShareLinkContent;
import com.facebook.share.widget.SendButton;

public class FbMessenger extends Application{

  private SendButton sendButton;
  private ShareLinkContent.Builder shareContentBuilder;
  private ShareLinkContent shareContent;

  // constructor
  public FbMessenger(){}

  public void init (String appid, Context ct) {
      FacebookSdk.setApplicationId(appid);
      FacebookSdk.sdkInitialize(ct);
      sendButton = new SendButton(ct);
      shareContentBuilder = new ShareLinkContent.Builder();
  }

  /**
   * call facebook messenger app & send message
   */
  public void send() {
      sendButton.performClick();
  }

  /**
   * set Content url
   */
  public void setContentURL(String url) {
      shareContentBuilder.setContentUrl(Uri.parse(url));
  }

  /**
   * set image url
   */
  public void setImageURL(String url) {
      shareContentBuilder.setImageUrl(Uri.parse(url));
  }

  /**
   * set title
   */
  public void setContent(String title) {
      shareContentBuilder.setContentTitle(title);
  }

  /**
   * set Description
   */
  public void setDescription(String desc) {
      shareContentBuilder.setContentDescription(desc);
  }

  /**
   * content build
   */
  public void build() {
      shareContent = shareContentBuilder.build();
      sendButton.setShareContent(shareContent);
  }
}
```

Facebook Messengerクラスの使い方です。

```java:MainActivity.java
int FACEBOOK_APP_ID = ;  // facebookアプリのIDを指定

FbMessenger fb = new FbMessenger();
fb.init(FACEBOOK_APP_ID, this);
fb.setContent("タイトルみたいに見えます。");
fb.setDescription("概要です。ちょっと長めに入れても大丈夫です。");
fb.setImageURL("http://cdn.qiita.com/assets/siteid-reverse-1949e989f9d8b2f6fad65a57292b2b01.png");  // サムネイルっぽい画像を表示できます
fb.setContentURL("http://qiita.com/");  // 投稿をクリックしたときの遷移先のURLです
```

Facebook　Messengerにメッセージを送る専用のクラスになってます。
Titleには文字数制限があって、70文字を超えると超えた分だけ見えないとかじゃなくて全部破棄されます。設定したImageとかも影響を受けるのか見えなくなります。

Facebookアプリを作成して、そのアプリのSettingのところからOS(Android)を追加してないと使えないです。このへんの設定は本家をご覧ください。

本家の説明では、AndroidManifestとかも設定するようにありますが、自分の環境では無くてもいけました。(無くてもいけるようにinit()でFacebookAppIDいれてたりします。)

***無理やりやってる感は否めないので自己責任でお願いしますｗ***