facebook4jの対応メモ
色々とFacebook自体が不勉強なのでメモしておく
色々とありがとうございます(ぺこり
- サポートAPI | Facebook4J - A most easily usable Facebook API wrapper in Java
- コードサンプル | Facebook4J - A most easily usable Facebook API wrapper in Java
- facebook4j-core 2.4.6 API
らへんを参考に
まずソースのプロジェクト構成が 1) main/java から始まってて参照エラー =>パッケージ名修正2) applicationタグの方に android:permission="android.permission.INTERNET" 書いてて起動エラー(要除去
CallBack版の資料も公開されていますね。
でもIOSのGameCenter並の手軽さじゃないと嫌がられるんですけどね<汗
ちなみに
<data android:scheme="demofacebook" android:host="NewsFeedActivity" />
と書かないと文句言われちゃうのかな‥‥
あとCALLBACK認証を繰り返していると=>ブラウザ開きまくる=>端末固まる=>電源切って再起動*1
はよくあるのでこれ閉じる方法って無いんだろうかとはよく思うわけですね‥‥‥*2
ちなみにGalaxyNoteやXoomがよく固まります。。あとセキュリティソフト複数入れてると
ブラウザIntentで開くだけでもスキャンかかってANR出やすいんですけどね*3
実際webview形式なら使うなら
android:hardwareAccelerated="false"
あたりも必須かも
今日のメモ。AndroidアプリをHTML5で組もうとするときは、とりあえずandroid:hardwareAccelerated="true"としておくと良い。GNなどの大画面+ICSな機種においてかなりの高速化が見込める。
2012-05-09 22:01:14 via web
でもCALLBACK形式のは
android:exported="false"
が指定できないのだけどな‥‥
2.1端末対応すると
<data android:scheme="@string/scheme_name" android:host="@string/host_name" android:path="/" />
な書き方ができないようなのでベタになるわけですけど、
セキュリティの話をするとここらへんは一番容易にデコンパイルできるわけだから切り無い気もする。
nakamapのMLにもMETAデータにベタ書きのキー暗号化できないの? みたいなのあったような。。。
ココらへんはキーベタ書きじゃないと認識しない系のADとかもあるわけですけど*4
世の中厳密に考えすぎると凄く面倒くさいかなと思ったりもしますね(汗
スマホのアプリってあれなんだよね.端末毎にID振ってそれをサーバのデータとひもづけてるんだけど,そのIDをユーザは知らないから引き継ごうにも元データを特定できない
んでデータを引き継がせるためには別途ユーザIDとかパスワードを登録してもらう必要があるんだけど,ゲームとかでそれを最初に強制しちゃうとめんどくて遊んでもらえない
な話もあるので。
利便性を取るか(面倒を感じさせないか)どうかの話
LINE/Comm/カカオとかセキュリテイ面からゆるゆるだけど
あれは利便性を重視している側面もあるのは否定できないんだよな
(課金しやすさ等も含めて)
の言及している話は凄く理解できるんだが、
ユーザに不便さを感じさせずに対処する方法は? という点(未だ1.6,2.1〜,3.0〜系のサポートはずっとある現状)、
Android4系からは
とか出来るわけだけど、ブラウザ形式だと開いた奴がずっと残ってる
とかあるわけで。。難しい話なんですけどね‥‥
よく感じるのはセキュリティクラスタの方は警告はしてるけど
それでもそういうソフト使った場合は自己責任のポジションなのかな。
<開発者の良心というのは簡単なんだけど、「ユーザ減少(獲得機会減少)の危険性とどっちとるの?」といわれると上に従わないと駄目
追記)
CALLBACK形式のOAuth関係にはこういう問題も有るみたい
(そういえばIS01のtw認証も一時期メモリ足りなくて落ちるから封じていたよな。。<汗)
メモリ少ない端末だと[アプリ]->[ブラウザ]->[アプリ]遷移したときにLowMemoryKillerでアプリが死んでて、Callback URLでアプリに戻ってきた時はmRequestTokenがnullなのでアプリが落ちる。ってのが原因っぽい。
RequestToken保存すればいけるかな。
onSaveInstanceState()で保存したBundleってLowMemoryKillerでプロセス死んでも有効なのかな?
LowMemoryKillerで死んでも、onSaveInstanceState()で保存しておいたBundleは使えるようだ。
twitter4j.auth.RequestTokenはSirializableなのか。Bundle.putSerializable()で保存してみる。
onSaveInstanceState()/onRestoreInstanceState()でmRequestTokenを保存・復元したら動いた。
LowMemoryKiller の話は勉強不足
onLowMemory() 辺りでメモリ足りなくなった=>開放処理 をする対応はしっていたけど
それだけじゃ対処不足なのか。成る程。
追記2)
ブラウザベースの認証でも穴有るみたいだな。。うーん。やっぱり根本対応は無理?
あのコールバック仕様のまま放置されているのは不思議>TwitterのOAuth 1.0
開発者としては
- ここまで対応したので安心してください
という話なのかな(汗。
はむーん とかは
PIN形式でも
- 内部ブラウザで認証
- 外部ブラウザで認証
作者の @roundrop さんから補足いただきました。ありがとうございます!
[http://twitter.com/roundrop/status/279100603861438464:twitter:tree]
#androidadvent2012 書いた sms日記 : Facebook4JのAndroidサンプルを動かしてみた URL
facebook4jのAndroidサンプル改変版 一応コミット。残)検索 、投稿系あたり。そういえば support by facebook4J みたいなダイアログ出したいかも(いろふさんの奴でも support by twitter4j出さないとダメだな。。。
@kimukou2628 そのリンク先のようなことだと URL ですね。PostUpdateのpictureに画像URLを入れる感じです。アップロードなら URL です。
2012-12-17 15:46:05 via web to @kimukou2628
@roundrop ありがとうございます。Android版のクライアントから ローカルの画像をpostしたい場合は後者のようですね。ちょっと試してみます。
2012-12-17 16:07:18 via YoruFukurou to @roundrop
User use = m_facebook.getMe(); Picture pic = user.getPicture(); //★ の段階でnullなんだけど自分のアイコン取得の方法としては間違ってるのかな? #facebook4j #q
@kimukou2628 User useだから?
@megascus それは転記誤記ですw ごめんなさいw
2012-12-17 22:54:01 via YoruFukurou to @megascus
@kimukou2628 残念w
誤記訂正。getNameは取得可 RT User user = m_facebook.getMe(); Picture pic = user.getPicture(); //★ の段階でnullなんだけど自分のアイコン取得方法間違ってるのかな? #facebook4j #q
@kimukou2628 m.getMe(new Reading().fields("picture")); または m..getPictureURL(); でとれます。getPictureURL() だと大きさも指定できたりします。 #facebook4j
そうなのか。。m_facebook.getMe(new Reading().fields("picture","name")); 等の形で 読み取りFieldsが必要なのですね(汗。奥が深い。。。 #facebook4j
@GOTT_eclair さんにも補足コメントいただきました。
API仕様から読み取れてない時点ですごく未熟><
誤記訂正。getNameは取得可 RT User user = m_facebook.getMe(); Picture pic = user.getPicture(); //★ の段階でnullなんだけど自分のアイコン取得方法間違ってるのかな? #facebook4j #q
@kimukou2628User usr = Facebook.getUser(String userId);Picture pic = usr.getPicture();かURL url = Facebook.getPictureURL();でダウンロードとかは?
2012-12-18 00:08:59 via ついっぷる Pro for iPhone to @kimukou2628
@GOTT_eclair ありがとうございます。URL url = Facebook.getPictureURL(); の方でいけました!前者の方は Facebook.getId() でIDは来るのですがpicの段階でnullになってしまうようです(汗
new Reading().fields("from", "message") 等の属性はどこを参照すればいいんだろう?イマイチなに指定していいかわかりづらい #facebook4j
@kimukou2628 Postであればここ URL ですね #facebook4j
@roundrop ありがとうございます。あと searchPostsなのですが、日本語で「テスト」と入力しても引っかからないようなのですがなにかせって入りますでしょうか? 「twitter」なら引っかかるイメージです
2012-12-21 00:47:21 via YoruFukurou to @roundrop
@kimukou2628 おっと検索文字列をURLエンコードしてなかった。。。でもURLエンコードしても見当違いのがヒットしますね。 URL でも同様に見当違いのがヒットするので、それはFacebook側の精度の問題ですね。
@roundrop ありがとうございます。URLエンコードが必要なのですね。情報感謝です?m(__)m
2012-12-21 01:02:24 via hamoooooon to @roundrop
@kimukou2628 本来はライブラリ側でURLエンコードすべきだと思うので、明日直してリリースします。でも日本語での検索は絶望的ですね。。。
実際やりたいことは
@roundrop 現在twでハッシュタグで呟く=>ハッシュタグ検索 のようなことをFBでも遣りたいのですが、仲間内だけという使い方ならgethomeやgetfeed等の絞りこみになるのかなとも一寸考えてる感じです。
2012-12-21 01:10:21 via hamoooooon to @roundrop
#facebook4j のサンプルいじってるけど、Readingって範囲指定で取得とかはやはり無理かな。#twitter4j でいうPagingみたいな奴。次の10件取得とかLimit増やして再検索はちと微妙
@kimukou2628 ちょっとやりたいことが見えないんですが、limit/offset、since/until の他に何か必要な感じですか?
@roundrop でも10件単位に順々にクリックして遡るだけであれば、確かにlimit/offsetで事足りますね(汗。Pagingの使い方の読み取り不足です。スミマセン><
2012-12-26 23:49:52 via YoruFukurou to @roundrop
@roundrop Reading().limit(10).offset(10) とかでも11−20というのはいけるんですけど 20件単位取得 で 1>18 みたいな総ページ数とか取得できるかな?と考えて URL のPaging読んでました
2012-12-26 23:47:41 via YoruFukurou to @roundrop
@kimukou2628 distanceの単位は URL に載ってました
@roundrop 色々と何時もありがとうございます。もう少し色々と触ってみます〜
2012-12-27 00:28:43 via YoruFukurou to @roundrop
検索 => Paging からの例は URL のスレッドに既にあった。。(スミマセン><) この形でチョットいじってみよう #facebook4j
?) public class NewsFeedAdapter extends ArrayAdapter<?> ◎) public class NewsFeedAdapter extends ArrayAdapter<Object> ですか。。Java力が足りんな。。(汗
うーん。確かに動かしてみると微妙に取りこぼしがあるように見える。FBのHPのデータと getHomeで取得してるデータが違うのかな? チョット謎。 とりあえずAPIの試しを作りきってから調べてみよう #facebook4j
@kimukou2628 API の /home で取れるデータは取りこぼしあるっぽいですね。なんて悠長なこと言ってられるレベルじゃなくて取れるデータのバリエーションとか仕様がぶっちゃけころころ変わるので神経質になったらきりがないですww
2012-12-27 01:48:53 via Tween to @kimukou2628
@takke コメントありがとうございます。tafviewでもいま確認してみましたが同じ状況なのでAPIがその分しか返却していない動きのようですね。なんか非公開の技があるのかな。。。(汗
2012-12-27 01:52:54 via YoruFukurou to @takke
@kimukou2628 あとAPI自体のバグもいくつかあって、たとえば友人AさんがBさんの記事Xにコメントした場合に記事XのIDが含まれないので「Aさんがコメントした」という情報しか得られないです。FBのAPIは信用できないという前提で作るべきかもしれません。
2012-12-27 01:55:27 via Tween to @kimukou2628
@takke なんか今の状態だと結構厳しいですね(汗。自分は 画像投稿文言ありで投稿 =>twitterみたいなハッシュタグ検索 ってのをやりたくて調べてたりしてるんですが、@roundrop さんにURLEncode対応してもらったのに日本語検索はやはり厳しいみたいです
2012-12-27 02:02:32 via YoruFukurou to @takke
[http://twitter.com/kimukou2628/status/289221378031366144:twitter:tree]
いや、やっぱりパラメータオブジェクトにすべきかな。
@roundrop そこらへん悩ましいですよね・・・。パラメータのデフォルト値していできないのでメソッド数すぐ爆発する…
@yusuke そうなんですよ・・・ちょっと見誤った感じです。Twitter4Jみたいに流行ってないからいいものの。
2013-01-08 21:33:09 via Janetter to @yusuke
Facebookって投稿した画像って削除できないのかな‥‥。メッセージは削除できるんだけど‥‥‥ unlikePhoto() はちがうよな・・・(汗
@kimukou2628 version 1.1.2 で deletePhoto() メソッドを追加しました。これで自分の写真は消せます。
@roundrop ありがとうございます!。早速試してみます
2013-01-12 00:37:12 via YoruFukurou to @roundrop
[http://twitter.com/kimukou2628/status/294070575935139840:twitter:tree]
#Facebook4J 2.0.3-snapshot でpostPhotoの引数が変わってる。。timelineに表示しないフラグとかなくなってしまったのかしら。。。
@kimukou2628 引数も組み合わせも多いので2.0からパラメータオブジェクトにしました。timelineに表示非表示はPhotoUpdate.noStory()で設定できるはずです。
あーTwitPaneもTwitter4JのAsync版使ってないので大丈夫ですよー RT @roundrop: Async版作ってれば気持ちよく使ってもらえそうだが間に合わなかったかー
@roundrop お手軽に作る人はそうだと思うんですが、性能をギリギリまで出そうとするとAndroid自体のAsyncTaskとか使ったほうが何かと便利なので。どこまで(例えばDB保存とか)を非UIスレッドで実施するか、といったところにチューニングポイントがあると思っています。
2013-11-26 19:24:34 via Tween to @roundrop
SDKの使い方が悪いのかなぁ。でもPHPとかJavaScriptとかのSDKだと回りくどい「追加要求」なんかせずに一括でREAD+PUBLISHで取れるからこんな問題起きないし、まじでFacebook4Jに移行するフラグだわ。
Facebook4JでTafViewの機能を実現できるか検証してるところ。とりあえずbatchを蹴るinterfaceがなさそうなのでMultiFQLに倣って実装する必要があるのかな。
@takke はいー。僕よりtakkeさんのほうがお詳しいような気もしますが。。
@roundrop batchはなんでもアリですからねぇ、型にはめてキッチリ構造化するととんでもないことになる予感がします。僕はとりあえず呼べればいいんでexecuteMultiFQL風のI/F自作して対応してみようと思っています。
2013-11-26 19:21:38 via Tween to @roundrop
現行SDK版からのアクセストークンの移行がめんどくさそう。今日は疲れたので明日やろうかな。