スポンサーリンク

Androidアプリで,Facebook APIを利用するための手順 (Facebook SDK for Androidの使い方)


Androidアプリを,Facebookと連携させるための手順。

Androidアプリ上からFacebookにログインして,ユーザアカウントのプロフィールを参照したり,友達情報を取得したりできる。


Android上でFacebookアプリを作るために,2010年5月*1より公開されている

「Facebook SDK for Android」を利用する。

  • (1)Gitの導入
  • (2)Facebook Android SDKを入手
  • (3)ActivePerl+VC++再頒布可能パッケージ+OpenSSLをインストール
  • (4)キーハッシュの取得と登録
  • (5)Facebook SDKを使ったプロジェクトの作成
  • (6)既存のEclipseプロジェクトに対して,Facebook SDKを組み込む手順


環境はWindows Vistaとする。

なお,事前に下記の手順を済ませておくこと。


Android開発環境の構築:

今から1時間で,Androidアプリの開発環境を構築し,Windows上でサンプルを動作させる手順
http://language-and-engineering.hatenablog.jp/entry/20110724/p1

Facebook Developersの登録:

Facebookアプリで「Hello, World」の作り方と,リリースまでの開発手順
http://language-and-engineering.hatenablog.jp/entry/20110821/p1

(1)Gitの導入

Git(ギット)は,分散リポジトリを扱えるバージョン管理システム。

Linuxの作者(リーナス・トーバルズ)がLinuxのソースコードを管理するために作った。

モダンになったSVN,みたいなもの。※SVNは今やレガシーツールである。

  • CVS:1990年生まれ
  • SVN:2000年生まれ
  • Git:2005年生まれ

ここでは,Facebook SDKを入手するための仲介役として必要。



msysgitのページにアクセス

Downloadsタブを押下。


リスト中から,

  • Git-1.7.6-preview20110708.exe

のようなファイルを見つけて押下。

同名のリンクが表示されるので,もう一度押下してダウンロード開始。


適当なフォルダに保存。

実行。

「Git Setup」のダイアログが現れる。

基本的にすべてNextを押下。

しかし,「Adjusting your PATH environment」の画面上では
「Use Git Bash Only」ではなく
「Run Git from the Windows Command Prompt」を選択。

また,「Configuring the line ending conversions」の画面上では
「Checkout as-is, commit as-is」を選択。

インストールが開始する。


インストールが終了する。

「Completing the Git Setup Wizard」の画面になる。

リリースノートは読まないことにして,Finishを押下。



コマンドプロンプトからgitを呼び出せることを確認。

C:\Windows\system32>where git
C:\Program Files\Git\cmd\git.cmd

C:\Windows\system32>git --version
git version 1.7.6.msysgit.0


参考:

Git/インストール(WindowsXP編)
http://yakinikunotare.boo.jp/orebase/...


Git
http://ja.wikipedia.org/wiki/Git

  • 動作速度に重点が置かれている
  • Linuxのカーネルでは、相当量のソースコードを扱うため、変更点の抽出やリポジトリ操作に時間がかかっていては困るという状況になっていた
  • CVSを「悪い見本」とする。設計上のことで確信が持てない場合は、CVSと逆の決断をする
  • 僕がSubversionが史上最大の無意味なプロジェクトであると思っていることも意味している
  • リーナスは従来と同じようなアプローチを意図的に避けており、結果としてGitは非常にユニークな設計になっている


JavaScriptが第一級のプログラミング言語へ、分散バージョン管理にも注目が集まる
http://www.publickey1.jp/blog/10/java...

  • 2010年初頭の情報
  • バージョン管理ツールのSubversionが後退し、それと入れ替わるように分散バージョン管理(Distributed version control)が前進。ホワイトペーパーでも「GitやMercurialといった分散バージョン管理はこの数年で大きな注目」

(2)Facebook Android SDKを入手

D:\dev\gitというフォルダを作成。

下記のコマンドを実行。

C:\Windows\system32>cd /d d:\dev\git


d:\dev\git>git clone git://github.com/facebook/facebook-android-sdk.git

Cloning into facebook-android-sdk...
remote: Counting objects: 1553, done.
remote: Compressing objects: 100% (482/482), done.
remote: Total 1553 (delta 722), reused 1441 (delta 628)Receiving objects:  92% (

Receiving objects: 100% (1553/1553), 3.45 MiB | 702 KiB/s, done.
Resolving deltas: 100% (722/722), done.


d:\dev\git>dir /b
facebook-android-sdk

D:\dev\git\facebook-android-sdkというフォルダができている。


参考:

Gitを使いこなすための20のコマンド
http://sourceforge.jp/magazine/09/03/...

  • git clone 既存のリポジトリの複製を作る

(3)ActivePerl+VC++再頒布可能パッケージ+OpenSSLをインストール

Facebook SDKの利用開始のためには,AndroidのキーハッシュをOpenSSLで生成する必要がある。

OpenSSL実行のためにはActivePerlやVC++再頒布可能パッケージがいるので,そちらを事前にインストールする。


ActivePerlのダウンロードページに遷移。
http://www.activestate.com/activeperl...

「Download ActivePerl for Windows x86」というボタンを押下。

自動的にダウンロードが始まる。

ActivePerl-5.12.4.1205-MSWin32-x86-294981.msiのようなファイル名。

実行。

ライセンスに同意する以外はひたすらNext。

Vistaだと途中でUACダイアログが出るので許可。

インストール完了時にFinishを押下。



次に,VC++再頒布可能パッケージをインストールする。

下記ページを開く。

Microsoft Visual C++ 2008 Redistributable Package (x86)
http://www.microsoft.com/download/en/...


ここで,Change LanguageでJapaneseを選択してはならない。

日本語にしてしまうと,インストールが成功しない。


画面はEnglishのまま,「vcredist_x86.exe」の隣にある「DOWNLOAD」を押下。

vcredist_x86.exeというファイルのダウンロードが開始。保存。

実行。

規約に同意してインストール。

インストール成功。



次に,OpenSSLをインストール。

OpenSSLのダウンロードページを開く。
http://www.slproweb.com/products/Win3...

「Win32 OpenSSL v1.0.0d」を押下。

Win32OpenSSL-1_0_0d.exeのようなファイル名でダウンロード開始。

保存。

実行。

UACダイアログが出たら許可する。

Setupダイアログが出る。

規約に同意して,全てNext。DLLの保存場所とかもデフォルトで良し。

インストールが開始する。

インストール完了。

donationのチェックを外して終了。


インストールされたか心配なら,コマンドプロンプト上から「openssl version」などのコマンドを実行してみる。


参考:

OpenSSL for Windows
http://homepage2.nifty.com/protocol/o...

  • OpenSSL for Windowsを動作させるにはPerlが必要なようです。(Active Perlを事前にインストールしておいてください。)


Microsoft Visual C++ 2008 再頒布可能パッケージ (x86)
http://www.microsoft.com/downloads/ja...

  • Microsoft Visual C++ 2008 再頒布可能パッケージ (x86) は、Visual C++ で開発されたアプリケーションを Visual C++ 2008 がインストールされていないコンピュータ上で実行するために必要な、Visual C++ ライブラリのランタイム コンポーネントをインストールします。


※なお,OpenSSLインストール時に下記のようなエラーメッセージが出る場合がある。

The Win32 OpenSSL Installation Project setup has detected that the following critical component is missing:
Microsoft Visual C++ 2008 Redistributables

Win32 OpenSSL will not function properly without this component.
It is recommended that you install the missing component before clicking "OK" to continue.

これは,VC++ 再頒布可能パッケージをインストールする際に,日本語版をインストールしてしまったために起こるエラーである。

正しくは,手順通り英語版をインストールすること。

OpenSSL for Windows ダウンロード&インストール
http://heppoen.seesaa.net/article/158...

  • 日本語版のVisual C++ 2008 SP1 再頒布可能パッケージ を入れても改善されませんでした

(4)キーハッシュの取得と登録

デバッグ用のキーストアから Key Hash を作る。

パスワードにはandroidと入力。

keytool -exportcert -alias androiddebugkey -keystore C:\Users\(ユーザ名)\.android\debug.keystore | openssl sha1 -binary | openssl base64
キーストアのパスワードを入力してください:  android
(キーハッシュが表示される)

このキーハッシュを大事に控えておく。



Facebook Developersのページを開く。
https://developers.facebook.com/apps

「+Create New App」を押下。

App Nameに適当な名前を入力。

Localeで日本語を選択。

「I agree to the Facebook利用規約」にチェック。(なんという和洋折衷な文章・・・)

続行を押下。

セキュリティチェックのCaptchaを入力して送信。



新規アプリのページに遷移する。

画面上部に「App ID」が掲載されているので,大事に控えておく。後で使う。


そのページ下部の「Mobile and Devices」をクリック。

「iOSバンドルID」
「iTunesアプリストアID」
の下に,
「Android Key Hash」という欄があるので,キーハッシュを入力。

「変更を保存」を押下。


これで,Facebook側は「呼び出される準備」が整った。


なお,キーストアに関する詳しい情報は,下記ページの(1)にあるリンク等を参照。

Androidアプリで,Google Maps API+GPS+Geocoderを使って,現在地の地図と地名を表示させよう
http://language-and-engineering.hatenablog.jp/entry/20110828/p1

(5)Facebook SDKを使ったプロジェクトの作成

Eclipse上で,ファイル→新規→プロジェクト から
プロジェクト名に「FBTest」と入力。

「外部ソースからプロジェクトを作成」にチェック。

ロケーションに
D:\dev\git\facebook-android-sdk\facebook
と入力。

「ビルド・ターゲット」の中から,適当なAndroid SDKバージョンを選択。

アプリケーション名・パッケージ名はともに「com.facebook.android」となっており変更不可。

「完了」を押下。


「FBTest」というプロジェクトが生成される。

srcフォルダの中には,既にFacebook用のコードが準備されている。



res/layoutフォルダの中に,main.xmlを作成。

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
>
  <TextView
     android:text="TextView"
     android:id="@+id/textView1"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"></TextView>
</LinearLayout>

非常に適当なレイアウト。


res/valuesフォルダの中に,strings.xmlを作成。これも適当。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, AndroidHelloWorldActivity!</string>
    <string name="app_name">FacebookTest</string>
</resources>

次に,com.facebook.androidパッケージ中に,MyGreatActivity.javaというファイルを作成。
(もったいぶった名前のクラスだが,Facebookが提供しているサンプルコードがそうなっているので仕方ない。)

package com.facebook.android;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import com.facebook.android.Facebook.*;

public class MyGreatActivity extends Activity {

    Facebook facebook = new Facebook("(ここにAPP IDを記載する)");

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        facebook.authorize(this, new DialogListener() {
            @Override
            public void onComplete(Bundle values) {}

            @Override
            public void onFacebookError(FacebookError error) {}

            @Override
            public void onError(DialogError e) {}

            @Override
            public void onCancel() {}
        });
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        facebook.authorizeCallback(requestCode, resultCode, data);
    }
}

APP IDは先ほど取得した物を記載する。

※別のパッケージにActivityを作ろうとすると「Unable to instantiate activity ComponentInfo」のエラーになったりして面倒なので,ここではひとまずこのパッケージ名を用いる。



AndroidManifest.xmlを書き換え。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.facebook.android">

    <uses-sdk android:minSdkVersion="3" />
    <application android:icon="@drawable/facebook_icon" android:label="@string/app_name">
        <activity android:name=".MyGreatActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

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

やっている事は,MAINのactivityの登録と,インターネット接続の許可。

あとicon画像がFacebookから提供されているのでその参照。

また,SDKレベルの定義。

※SDKレベルを書かないと,「Application does not specify an API level requirement!」のエラーが出て起動しない。

how to resolve "WARNING: Application does not specify an API level requirement"?
http://stackoverflow.com/questions/47...

最後に,default.propertiesの内容を編集。

android.library=true

↓

android.library=false

※ここを書き変えないと,「android library projects cannot be launched」のエラーで実行できなくなる。

「android library projects cannot be launched」 - あんどろいど開発
http://programamemo2.blogspot.com/201...

ここまで来たら,javaファイルにフォーカスを当てて

Eclipse上で 実行→実行→Androidアプリケーション

で,エミュレータが立ち上がる。


「facebook ログインしてください」のダイアログが出れば成功。

メールアドレスに,自分の登録済みメアドとパスワードを入力。

「ログイン」ボタンを押下。


「記憶しますか?」と尋ねられるので,「今は記憶しない」を押下。


「アプリの許可」のダイアログになる。

ダイアログ下部には,自分の氏名が表示されているはず。(※実名で登録していれば,だが・・・)

下部の「許可する」を押下。


ダイアログが消える。

これは,Facebookへの認証に成功したということ。


あとは,認証成功時・失敗時のアクションを作りこんでゆくだけだ。


(6)既存のEclipseプロジェクトに対して,Facebook SDKを組み込む手順

上記で述べたのは,新規プロジェクトを作成する場合。

既存のプロジェクトでFacebookの機能を後付けしたい場合は,下記のような手順を踏む。



まず,上記で作成したFacebookプロジェクトを選択し,

メニューバーの プロジェクト→プロパティ を押下。

左側の「Android」を選択。

右下のほうに「Is Library」というチェックがあるのでチェック。

OKを押下。

これで,このFacebookプロジェクトをライブラリとして参照できるようになった。



次に,Facebookの機能を利用したい既存プロジェクトをEclipse上で選択。

メニューバーの プロジェクト→プロパティ を押下。

左側の「Android」を選択。

右下のほうに「ライブラリー」の「追加」ボタンがあるので押下。

先ほどライブラリとして登録したプロジェクトを追加して,OKを押下。

ライブラリーに追加されたことを確認してOKを押下し,ダイアログを閉じる。



これで,既存のプロジェクトからもFacebookの機能を利用できる。

試しに,プロジェクト内の特定のアクティビティに,下記のような改変を加えてみる:


class宣言内部でFacebookインスタンスを宣言:

    Facebook facebook = new Facebook("(APP ID)");

onCreateメソッド内で,ログインダイアログを表示:

        facebook.authorize(this, new DialogListener() {
            @Override
            public void onComplete(Bundle values) {}

            @Override
            public void onFacebookError(FacebookError error) {}

            @Override
            public void onError(DialogError e) {}

            @Override
            public void onCancel() {}
        });

下記のコールバックメソッドを実装:

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        facebook.authorizeCallback(requestCode, resultCode, data);
    }


これで,アプリを実行すれば,Facebookログイン用のダイアログが表示できる。


参考:

AndroidでActivityを含む別プロジェクトをライブラリとして参照する方法
http://tmpla.info/2011/03/13/android%...

  • ライブラリとして使用するプロジェクトを作成(か、インポートか)します。
  • このプロジェクトのプロパティをひらいて、android-Is libraryのチェックを付けます。
  • そしたらAndroidプロジェクトでは、ライブラリと認識される


Android Project で Is Library を使う場合、res の管理に注意
http://kokufu.blogspot.com/2011/08/an...

  • Library と Application(使用する側)に同じ名前のリソースがあると、コンパイルエラーにはならないが、実行時におかしなことが起こる
  • (Is Library を使っても)ライブラリとアプリケーションで resource ID を共有するから、リソースが重複するとどちらかが破棄される

補足:


全体の流れの参考:

Facebook Android SDK を使ってみる
http://takutless.blogspot.com/2011/03...

  • 環境構築から,アプリ上で認証するところまで


開発用署名 debug.keystore
http://sites.google.com/site/matsudro...


Mobile Apps / Android
https://developers.facebook.com/docs/...

  • 公式チュートリアル(英語)


Facebook開発者向けドキュメントの日本語訳とTips
http://facebook-docs.oklahome.net/arc...

  • 公式チュートリアルの日本語訳


今後,役立つであろう有用なリンク:

Facebook SDKのリファレンスマニュアルの日本語訳
http://facebook-docs.oklahome.net/arc...


Android SDKを用いてFacebookの友達をListViewに表示するコード
http://d.hatena.ne.jp/ke-16/20110706


IBMのFacebook API 入門
http://www.ibm.com/developerworks/jp/...


 

*1:http://jp.techcrunch.com/archives/20100527facebook-launches-android-sdk/ iPhone SDKよりも1年遅れで発表された。