Androidアプリから,FacebookのSDK 3.0を使う場合のTips.
Android用Facebook SDKのTips拙作のアプリ 山旅ロガーFlash で,データをFacebookに投稿する機能を実装しました.Facebook SDK for Android の3.0を使ったのですが,そのときに調べた内容を簡単にまとめます. (1) Facebookアプリの存在チェックFacebookにログインするにはFacebookアプリを呼び出すように,とのお達しなので, 端末にFacebookアプリがインストールされていない場合は,機能を使えないようにする制御を入れました.こんな感じで,"com.facebook.katana" パッケージの有無をチェックしました.
(2) Facebookログインボタンの見栄えをカスタマイズするデフォルトではFacebookロゴの青い画像のボタンです.ただしうちのアプリでは標準パーツで画面を組み立てているため,この青い画像は浮いてしまいます. それで,これをButton標準パーツの見栄えに変更したいと思ってソースを見ると FacebookSDK/src/com/facebook/widget/LoginButton.java L.200-
それでこんな感じで,アプリ側のlayout xmlにでたらめなstyle属性値を設定してみました. <com.facebook.widget.LoginButton android:id="@+id/btnFbLogin" style="@string/app_name" ・・・ facebook:confirm_logout="false" facebook:fetch_user_info="false" facebook:login_text="Facebookにログイン" facebook:logout_text="Facebookからログアウト" parseAttributes(attrs); ...結局,こんな風にソースを変更して対応しました. FacebookSDK/src/com/facebook/widget/LoginButton.java L.197-
アプリ側のlayout xmlでのログインボタン記述は,こんな感じです.styleの値は適当ですので参考にしないで下さい. <com.facebook.widget.LoginButton android:id="@+id/btnFbLogin" style="@string/app_name" facebook:confirm_logout="false" facebook:fetch_user_info="false" facebook:login_text="Facebookにログイン" facebook:logout_text="Facebookからログアウト" android:layout_width="wrap_content" android:layout_height="wrap_content" /> (3) 画像とコメントを一緒に投稿するFacebookに画像,写真を投稿するメソッドcom.facebook.Request.newUploadPhotoRequest() 仕方がないので,同じRequestクラスにこんなメソッドを追加して対応しました. FacebookSDK/src/com/facebook/Request.java に追加
(4) バックグラウンドから投稿するActivityから投稿するのはサンプルもあって簡単なのですが,Activity以外から投稿するのに難航しました.具体的には,ContentProviderからnewしたバックグラウンドスレッドからの投稿です. これは,完全には解決できていません. 以下の実装で動いてはいますが,セッションの期限切れのような状態で失敗する場合があり,不完全です. String message = (5) SDK既存バグの修正Facebookのログイン画面でキャンセルするとヌルポ.→FacebookSDK/src/com/facebook/AuthorizationClient.java を修正します. (6) API Levelを下げるSDKそのままだと,minSdkVersionが8(Android 2.2)です.これでいいならこのままで良いと思いますが,うちは5(Android 2.0)まで下げました. 5に下げた状態でlintをかけた時に発生するエラーで修正箇所はわかりますが, @Deprecatedでかつ実際にも使われていないメソッドで発生しているものが多く,それらはメソッドごとコメントアウトしました. 若干微妙な箇所で,ここがありましたが, FacebookSDK/src/com/facebook/widget/WebDialog.java L.344-
(7) proguard (2013/4/7 追記)それなりにハマりました.
-libraryjars \libs\android-support-v4.jar -dontwarn **CompatHoneycomb -dontwarn **CompatCreatorHoneycombMR2 -dontwarn android.support.v4.view.** -keep class android.support.v4.** { *; } -keep class com.facebook.** { *; } -keep class android.webkit.WebViewClient -keep class * extends android.webkit.WebViewClient -keepclassmembers class * extends android.webkit.WebViewClient { <methods>; } -keepattributes Signature 参考リンク |