13

私はこれは、AndroidのFacebook /多くの開発者に影響を与える可能性があり、まだ話題にその多くの議論があるようには思えない...AndroidアプリケーションでextendAccessTokenIfNeededを使用してFacebookトークンを拡張することはできますか?

私の質問

は誰もが正常にリフレッシュされていると思いますextendAccessTokenIfNeeded関数を使用するトークン?あなたが成功した場合、デバイス(またはエミュレータ)はどのバージョンで動作していましたか?

背景

私はoffline_access許可は5月1日2012から廃止され、Facebookはその最新のSDKへのアップグレードを推奨言うのFacebookからのメールを受け取りました。ファイン。

最新のSDKにアップグレードすると、公式のFacebookアプリが自分のデバイスにインストールされ、(結局のところ!)シングルサインオンが正常に機能しているようです。私は再びOKである60日間のトークンを受け取っています。

extendAccessTokenIfNeeded(コンテキストコンテキスト、ServiceListener serviceListener)を使用しようとしたときに問題が発生しました。私はそれがより長い有効期限のために私のトークンを更新することができませんでした。私は試行の間に24時間待っていましたが、トークンは更新されませんでした。リフレッシュされたトークンを取得できる唯一の方法は、ログアウトしてログインすることです。これは私がサンプルプロジェクト "Hackbook"を使用したときにも起こりました。

最も明白な答えは私が間違ったことをしていることですが、bug reportはFacebookに提出されました。「shouldExtendAccessTokenはほとんど常にfalseを返します。この報告書には、優先事項「ウィッシュリスト」が与えられています。 Facebook documentation about offline_access deprecationトークンで

extendAccessTokenAsNeededの代替()

は、グラフAPIを使用して拡張することができます。ただし、URLにはdisadvantage of needing the "App Secret"が含まれています。利点は、ユーザーがデバイスに公式Facebookアプリをインストールする必要がないことです。

その他のアイデアや懸念

  • 常にtrueを返すようにFacebook.javaにextendAccessTokenIfNeeded機能を変更することにより、私はそれが一度リフレッシュするようになったと思います。 (私はそれが動作を繰り返すことはしませんし、私は別の成功のチャンスの前に別の24時間を待たなければならない疑いがあるためである「と考える」と言う理由)

  • 私はHackbookが をインポートするAndroidHttpClientが必要であることに気づきます。これは、API 8以降でのみ使用できます。これは、Facebook SSO(特にトークンリフレッシュ)がAPI 8以降のデバイスでのみ動作する可能性が高いことを意味する を意味しますか?

  • Facebook.apk included in the SDKはかなり古いです。 API 8以降を実行しているエミュレータでトークンが更新されないのはなぜですか?

  • 最後に、これは の公式Facebookアプリがインストールされているユーザーのみに関連しています。もう一つの方法は、公式のFacebookアプリなしでそれらの人々のために完了する必要があります(ちょうど今不平を言う!)

関連Facebookは

Facebook-Android-SDK at GitHub

Facebook Android Tutorial

Facebook offline_access permission deprecation

Facebook bug report

リンク

関連スタックオーバーフローに関する質問

Facebook 60 day access token and Deprecated Offline_Access

Facebook access token can not be extended

How would offline_access work after deprecation after May 1st?

Facebook access token can not be extended

Protecting app secret for extendAccessToken usage (Java/Android)

+0

"Facebook.javaのextendAccessTokenIfNeeded関数を常にtrueに変更することで、一度リフレッシュすることができたと思います(「考える」と言う理由は、動作を繰り返さないためです)別の成功のチャンスの24時間前にもう一度待ってください) "あなたは再テストしましたか? – nmr

答えて

3

私はAndroidの開発を知らないが、あなたはその関数の問題を抱えている場合は、多分あなたはhttps://graph.facebook.com/oauth/access_token?
client_id=APP_ID& client_secret=APP_SECRET& grant_type=fb_exchange_token& fb_exchange_token=EXISTING_ACCESS_TOKEN

を呼び出すことができますAndroidの内CURLの同様の機能があります(Googleが明らかになったからカールする方法についてhttp://thesoftwarerogue.blogspot.com/2010/05/porting-of-libcurl-to-android-os-using.html Android)

+0

あなたの返事ありがとうございます。私は調査します。 – Mel

+1

これはうまくいくとは思わないし、良いアイデアだとは思わない。私はあなたのAndroidアプリにclient_secretを埋め込むことを意味するので、それは良い考えではないと思います。これは公開されていることを意味し、悪いことです。このエンドポイントは、元の60日間の有効期限を過ぎてアクセストークンを拡張できないように見えるため、これは機能しないと私は考えています。 (ただし、2時間のクライアント側の認証トークンを60日間のトークンに拡張するとよいでしょう) – nmr

+1

この呼び出しは、client_secretが本当に秘密であるリモートWebサーバーから行う必要があります。 CURLを使用してアンドロイドからリモートWebサーバーにAJAXできるようになりました。 – DMCS

1

REFRESH_TOKEN_BARRIERの時刻を変更してみてください。テストするたびに24時間待つ必要はありません。私は鉱山を約2分に変更しました.2分後にアプリを再起動したときにアクセストークンが実際に拡張されているのがわかりました。

関連する問題