2011-11-09 37 views
2

我正在嘗試處理來自其用戶的Facebook帳戶的實時Feed更新的網站。我有基本的東西:應用程序訂閱「飼料」,並且用戶的登錄請求read_stream和offline_access(以防萬一)權限。我的測試用戶已登錄到FB並授予這些權限,並且當其中一個用戶添加(或刪除)狀態更新時,我的站點訂閱中指定的回調將被ping通。到目前爲止,一切都很好。您如何處理實時Feed更新?

現在 - 據我瞭解 - 我的回調函數必須調用Facebook來獲取用戶的提要,以便回調函數可以執行任何與它有關的操​​作。這就是我遇到的問題 - 尋找合適的訪問令牌來獲取飼料:

  • 我試着與應用程序的訪問令牌這樣做。此令牌能夠檢索朋友信息(也包括在應用程序的訂閱和用戶權限中),但它不會讓我獲得訂閱。

  • 我試過各種方式從回調中獲取用戶的訪問令牌,但沒有任何工作。我猜這是因爲它沒有像瀏覽器中的用戶那樣「登錄到Facebook」,但無論如何。底線是我沒有找到一種方法來獲得這個令牌。

(順便說一句,如果我騙 - 獲取從圖形API資源管理器,它硬編碼到回調的用戶的訪問令牌,回調正常工作這是沒有真正的解決方案,當然,但它至少證明我的代碼的其餘部分正在工作。)

那麼這是如何工作的?應用程序訪問令牌能夠以某種方式工作嗎?實際上是否有一種回調方式來獲取任意授權用戶的訪問令牌?有一種方法可以做到這一點,否則實時饋送通知就沒有意義。有任何線索嗎?這是嚴重踢我的屁股...謝謝!

回答

1

我找到了一個解決方案,可能是:當用戶登錄時,我攔截了啓用offline_access的訪問令牌,並將其與用戶數據的其餘部分一起保存在應用程序中。然後,當我收到有關用戶提要的更新的通知時,我可以從數據庫中提取令牌並將其作爲/ feed ...調用的令牌部分傳遞給FB。而且,它的工作原理。毫無疑問,一些錯誤處理是可以完成的,但是我現在反覆地認爲(a)這是處理這個問題的正確方法,以及(b)僅僅是要求麻煩的可怕攻擊。我想我會看看其中哪些是這種情況...

+0

是的,如果你有一個access_token,它通常會在1-2小時內到期,我想。如果需要更長時間使用該令牌,則需要offline_access。 – Drizzt321

1

詢問offline_access(和您一樣)並存儲訪問令牌。這就是爲什麼offline_access和訪問令牌存在,以便以該用戶的名義向Facebook發出請求的原因。 (a)是正確的路要走。 (a)是我這樣做的方式。 祝你好運

0

當用戶通過OAuth認證的Facebook返回一個訪問令牌,但它是有效的幾個小時。該令牌的有效性與它一起作爲令牌到期。 但是,此令牌可以與約60天有效的新擴展令牌交換。用戶將下面的代碼,以獲得新令牌:

網址URL =新的URL( 「https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id= 」+的appid +「 & client_secret = 」+ clientSecretId +「 & fb_exchange_token =」 + fb_exchange_token;

的InputStream的IStream = url.openConnection ().getInputStream();

的BufferedReader BR =新的BufferedReader(新的InputStreamReader(IStream的));

字符串new_token = br.readLine();

希望它有幫助!