2013 年 5 月 5 日

アンドロイドアプリからFacebookへログインする方法(前編)

アンドロイドアプリからFacebookへログインする方法(前編)

前回では、アンドロイドアプリからGoogle+へログインする方法をご紹介しました。
Facebookからのログインは、Twitterからのログインと合わせて備えているアプリが多いです。

Facebook SDK3.0になってから、Facebookクラスがdeprecatedされて、大きく変わったように思います。Facebookは常に改善が加えられているためか、よく仕様が変わるように思います。気づかずそのままにしていると、いつのまにやら、動作しないアプリになっているときもあります(最近は変更通知がくるようになりました)。

Facebookでは、開発のロードマップが公開されているので、今後どのような変更が予定されているのか、よく知っておく必要がありそうです。

Developer Roadmap

今回は、Facebook SDK3.0によるログイン方法をご紹介します。EclipseのバージョンはJuno Service Release 2(Win)を利用しています。

参考URL

  1. Getting Started with the Facebook SDK for Android
  2. Upgrading from 2.0 to 3.0
  3. Use Facebook Login
  4. Facebook SDK 3.0 for Android Reference

ダウンロード

まず、Facebook Android SDK 3.0.1をダウンロードします。
そして、File -> New -> Project… Android Project Existing CodeからEclipseへインポートしておきます。

SDKには、サンプルアプリもたくさん含まれています。ログイン関連だとSessionLoginSampleやScrumptiousが参考になると思います。必要なら同時にインポートします。

新しいFacebookアプリを作成

次にこちらからFacebookアプリを作成しておきます。
アプリの名前を決めて続行をクリックし、セキュリティチェックを通過すると、アプリの設定画面が表示されます。

ネイティブAndoroidアプリをチェックして、設定画面を開きます。
ここにアプリのパッケージ名とアクティビティ名、KeyHashを入力して、Facebookログインを有効にします。ログインのみならディープリンクは無効でもいいです。

KeyHashの生成

KeyHashを生成するには、keytoolとopensslが必要です。keytoolはJDKに含まれています。
以下のコマンド(Win)でパスワードを入力すれば、ハッシュが出力されます。

$ keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64
キーストアのパスワードを入力してください: android
alSY2Jj72aZzm9W067UtS13/i8I=

Facebookログインアプリを作成

では、アンドロイドアプリのプロジェクトを作成します。
パッケージ名やアクティビティ名は、さきほどFacebookアプリで設定したものを指定します。

FacebookSDKライブラリをインポート

プロジェクトのプロパティからFacebookSDKを選択して、Eclipseのワークスペースへインポートします。

このとき、以下のようなエラーがコンソールに出力されるかもしれません。

[2013-05-03 16:33:15 - FacebookLogin] Found 2 versions of android-support-v4.jar in the dependency list,
[2013-05-03 16:33:15 - FacebookLogin] but not all the versions are identical (check is based on SHA-1 only at this time).
[2013-05-03 16:33:15 - FacebookLogin] All versions of the libraries must be the same at this time.

追加したライブラリプロジェクトに同名(android-support-v4.jar)で異なるバージョンのライブラリがあるので警告しています。
FacebookSDKのandroid-support-v4.jarが古くなっているのだと思います。
FacebookSDKプロジェクトをandroid-support-v4.jarを最新にして、バージョンを揃えると解消します。
プロジェクトを右クリックして、Android Tools -> Add Support Library…からインストールしてください。

マニフェストに追記

マニフェストにインターネットのパーミッションを追加します。uses-permissionタグはapplicationタグより前に書かなければ警告が出ます。meta-dataはapplicationタグ内に書きます。また、strings.xmlのapp_idにさきほど作成したFacebookアプリのApp Idを設定しておきます。SDK3.0からはManifestにApp Idを設定するようになりました。

res/values/strings.xml

<string name="app_id">497906953566757</string>

AndroidManifest.xml

<!-- users-permissionはapplicationタグより前に -->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- meta-dataはapplicationタグ内に -->
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/>

最後にcom.facebook.LoginActivityを追加します。

<activity android:name="com.facebook.LoginActivity"/>

これで、コーディング前の準備は整ったと思います。次回はコーディング編とします。