最近、Androidより娘の相手をしてるほうが楽しいです。@ryosmsです
Android Advent Calendar 2012の裏14日です
ネタがない、と悩んでる時にこんな記事を発見しました
Facebook4JをAndroidアプリ上で動かすサンプルコードを公開しました+α
Facebookのアプリなんかも作ってみたかったので、これ幸いと飛びついてみました
で、このサンプルコード、私の環境では動かすまでにいろいろと修正が必要だったので公開しておきます
Android Advent Calendar 2012の裏14日です
ネタがない、と悩んでる時にこんな記事を発見しました
Facebook4JをAndroidアプリ上で動かすサンプルコードを公開しました+α
Facebookのアプリなんかも作ってみたかったので、これ幸いと飛びついてみました
で、このサンプルコード、私の環境では動かすまでにいろいろと修正が必要だったので公開しておきます
環境
GitHubよりroundrop/facebook4j-android-exampleをclone
上記プロジェクトをEclipseにimport
プロジェクトをMavenプロジェクトに変換
プロジェクトにエラーマーク(赤!)が付いてるので、プロジェクトのBuild Pathを修正
App IDとApp Secretをfacebook4j.propertiesにセット
(GitHubのREADMEにはここでRun as Android Applicationしろと書いてあるので)実行
→インストールはできるけど、ActivityManagerがjava.lang.SecurityExceptionを吐いて起動できず
→ドロワーから実行しようとすると「このアプリはインストールされていません。」
AndroidManifest.xmlを修正
再度実行
→認証開始前に(ダイアログでOK押したら)クラッシュ
OAuthTask.javaのonProgressUpdateで強制的にfacebook4j.propertiesの内容をセットしてみる
再度実行
→Facebookのログインページが表示された!
→けど「認証しろよボケ」ダイアログと認証用のActivityの無限ループ... orz
例外を確認してみると「read_streamのパーミッションがねーよバーカバーカ」ということだったので、11で追加したsetOAuthPermissionsにread_streamを渡してみる
読めた!

(本来ならfacebook4j.propertiesから設定を読み込むはずなので、facebook4j.properties-templateのpermissionsを変更しています)
OAuthTask.javaへ追加した、App ID、App Secret、Permissionsをコードで直接指定する修正はno-propertiesブランチを作成して追加しています
(facebook4j.propertiesから設定が読めてないところとかはよくわからないので、有識者の方にがんばってもらいましょう←)
ということでAndroid Advent Calendar 14日目担当 @ryosmsでした
そろそろ折り返しが近づいて来ましたね
明日は表が@sys1yagiさん、裏が@kenz_firespeedさんです
br /
- Mac OS X 10.7.5(Lion)
- Eclipse Juno 4.2.1
- Android SDK Tools Rev.21
- Android SDK Platform-tools Rev.16
- Android Development Toolkit Ver.21.0.0
- Maven 3.0.3
- M2E 1.2.0
事前準備
- Facebookに開発者登録する(結構めんどいのでググってがんばれ)
- Facebookのアプリ登録を行い、App IDとApp Secretを取得する
GitHubに書いてある通り「Website with Facebook Login」を選択し、Site URLに「http://facebook4j.org」を設定しておく -
このへんを参考にしてandroid-maven-pluginの環境を構築しておく
動作確認環境
Galaxy Nexus(JCROMなSC-04D)
Androidバージョン: 4.2.1
JCROMバージョン: JCROM-0.9.2-20121201
GitHubよりroundrop/facebook4j-android-exampleをclone
Eclipseのワークスペースディレクトリで
$ git clone git://github.com/roundrop/facebook4j-android-example.git F4JSample
上記プロジェクトをEclipseにimport
[New]→[Project...]→[General]→[Project]でProject nameに「F4JSample」を入力してfinish
プロジェクトをMavenプロジェクトに変換
[Configure]→[Convert to Maven Project]
プロジェクトにエラーマーク(赤!)が付いてるので、プロジェクトのBuild Pathを修正
[Build Path]→[Configure Build Path...]→[Java Build Path]→[Source]タブから/src/test/javaを削除
もしくはsrcディレクトリにtest/javaディレクトリを追加
App IDとApp Secretをfacebook4j.propertiesにセット
・src/main/resourcesのfacebook4j.properties-templateをfacebook4j.propertiesにリネーム
・取得済みのApp IDとApp Secretをセット
(GitHubのREADMEにはここでRun as Android Applicationしろと書いてあるので)実行
→インストールはできるけど、ActivityManagerがjava.lang.SecurityExceptionを吐いて起動できず
→ドロワーから実行しようとすると「このアプリはインストールされていません。」
AndroidManifest.xmlを修正
6行目:<application>に指定されているpermissionを削除Lintの警告がいろいろ出てるので、ここでついでに解消してあげてもおk
android:permission="android.permission.INTERNET"
※uses-permissionではないので注意!
- uses-sdkの指定がないので指定する
- <application>からandroid:debuggable="true"を削除
- <application>にandroid:allowBackup="false"を追加(別にtrueでもいいけど)
再度実行
→認証開始前に(ダイアログでOK押したら)クラッシュ
java.lang.IllegalStateException: OAuth app id/secret combination not supplied
(facebook4j.propertiesの設定が読み込まれてない?)
OAuthTask.javaのonProgressUpdateで強制的にfacebook4j.propertiesの内容をセットしてみる
Facebook facebook = mOAuthWebView.getFacebook();
facebook.setOAuthAppId("**********", "********************");
facebook.setOAuthPermissions("email,publish_stream");
再度実行
→Facebookのログインページが表示された!
→けど「認証しろよボケ」ダイアログと認証用のActivityの無限ループ... orz
例外を確認してみると「read_streamのパーミッションがねーよバーカバーカ」ということだったので、11で追加したsetOAuthPermissionsにread_streamを渡してみる
facebook.setOAuthPermissons("read_stream");
読めた!

というわけで、オリジナルのリポジトリをforkして、上記の手順で行った修正(の一部)を反映したものをGitHubに公開しました
ryosms/facebook4j-android-example
(本来ならfacebook4j.propertiesから設定を読み込むはずなので、facebook4j.properties-templateのpermissionsを変更しています)
OAuthTask.javaへ追加した、App ID、App Secret、Permissionsをコードで直接指定する修正はno-propertiesブランチを作成して追加しています
試してみる場合は適当にcheckoutしてみてください
- no-propertiesブランチの内容をpull(clone)して
- Mavenプロジェクトに変換
- OAuthTask.javaの該当箇所を探してApp ID、App Secretをセット
で、動作すると思います
(このサンプルのやり方はいろいろとアレなので、実際にアプリを作成する時にはベストプラクティス的なやり方を探してみて下さい)
※このブログを書いてる時に、Mavenを使わないバージョンを@kimukou2628さんが作ってくれました
kimukou/facebook4j-android-example
まとめ
Facebook4Jを使うことでFacebookアプリ作成の夢が広がりんぐですね
(facebook4j.propertiesから設定が読めてないところとかはよくわからないので、有識者の方にがんばってもらいましょう←)
ということでAndroid Advent Calendar 14日目担当 @ryosmsでした
そろそろ折り返しが近づいて来ましたね
明日は表が@sys1yagiさん、裏が@kenz_firespeedさんです
br /
コメント