13

我想,這可能影響了很多的Facebook/Android開發,但似乎沒有要上話題,很多討論......是否可以在Android應用程序中使用extendAccessTokenIfNeeded擴展Facebook令牌?

我的問題

有沒有人成功刷新一個使用extendAccessTokenIfNeeded函數的令牌?如果您確實取得了成功,那麼設備(或模擬器)運行的版本是什麼?

背景

我收到一封電子郵件從Facebook稱offline_access許可將從2012年5月1日被棄用和Facebook建議升級到最新的SDK。精細。

我升級到最新的SDK,官方的Facebook應用程序安裝在我的設備上,並且(最終!)單一登錄似乎工作正常。我正在接受60天的代幣,這也是可以的。

當我嘗試使用extendAccessTokenIfNeeded(上下文上下文,ServiceListener serviceListener)時啓動問題。我無法讓它在更長的到期時間內刷新我的代幣。我在兩次嘗試之間等了24小時,但令牌不會刷新。我可以獲得刷新令牌的唯一方法是註銷並登錄。這也發生在我使用示例項目「Hackbook」時。

最明顯的答案是我做錯了什麼,但是,bug report已提交給Facebook,表示...「shouldExtendAccessToken實際上幾乎總是會返回false」。這份報告已被列爲優先「願望清單」。

替代的extendAccessTokenAsNeeded()

Facebook documentation about offline_access deprecation令牌可以使用Graph API進行擴展。但是,該網址中包含disadvantage of needing the "App Secret"。一個好處是用戶不需要在他們的設備上安裝官方Facebook應用程序。

其他的想法和顧慮

  • 通過改變Facebook.java的extendAccessTokenIfNeeded函數總是返回true,我覺得我得到它刷新一次。 (我說「想」的原因是因爲它不會重複的行爲,我懷疑我有另一個成功的機會之前要等待另一個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,我想我會刷新一次。(我之所以說」think「是因爲它不會重複該行爲,我懷疑我必須再等24小時才能再獲得成功)「你有沒有重新測試過? – nmr 2012-04-20 23:44:19

回答

3

我不知道Android的發展,但如果你有與該功能的問題,也許有捲曲的內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

(谷歌透露:http://thesoftwarerogue.blogspot.com/2010/05/porting-of-libcurl-to-android-os-using.html如何沒有捲曲Android)

+0

謝謝你的回覆。我會調查。 – Mel 2012-04-09 23:17:49

+1

我不認爲這會起作用,我不認爲這是個好主意。我認爲這不是一個好主意,因爲這意味着將你的client_secret嵌入你的Android應用程序中,這意味着它是公開的,這是不好的。我不認爲這會起作用,因爲此端點似乎無法將訪問令牌擴展到原來的60天到期。 (但是,將2小時客戶端身份驗證令牌擴展爲60天令牌是有益的。) – nmr 2012-04-20 23:43:30

+1

應該從遠程網絡服務器進行調用,其中client_secret是真正的祕密。所以你可以使用CURL從android到AJAX到遠程web服務器。 – DMCS 2012-04-23 16:28:03

1

嘗試更改REFRESH_TOKEN_BARRIER的時間,以便您不必每次都需要等待24小時才能進行測試。我將我的狀態改爲2分鐘左右,當我在2分鐘後重新啓動應用程序時,我能夠看到訪問令牌實際上正在擴展。

相關問題