2014-10-30 42 views
2

我有一個要求,下載併爲我們在我們的系統中使用它作爲其用戶帳戶的圖片像很多其他的應用做存儲用戶的Facebook圖片。檢查用戶的Facebook個人資料已更新

問題是我不希望每次我得到一個活動會話的時間將其覆蓋。我寧願做的是以某種方式檢查用戶是否更新自上次檢索後的個人資料圖片。如果他們有那麼顯然我想更新我有在我們的系統,以配合在Facebook當前的..

我的問題

是否有更新的時間戳或東西,我可以尋找到查看用戶的Facebook個人資料圖片何時更改?

有沒有更好的方法?

UPDATE

去上@智的建議下,我做了一個圖形API請求「/我/圖片」圖形的端點,可以成功地找回用戶的配置文件圖像但它不會返回結束標記在標題中。請參閱下面的代碼。

Request.newGraphPathRequest(Session.getActiveSession(),"/me/picture",new Request.Callback() { 
       @Override 
       public void onCompleted(Response response) { 
        Map<String,List<String>> headers = response.getConnection().getHeaderFields(); 
        for (Map.Entry<String,List<String>> entry : headers.entrySet()) { 
         Log.d(LOG_TAG,entry.getKey()+": "+entry.getValue().toString()); 
        } 

        Log.d(LOG_TAG,response.getRawResponse()); 
        Log.d(LOG_TAG,response.getGraphObject().toString()); 
       } 
      } 
     ).executeAsync(); 

更新2

我改變了圖形請求的結束標記只/我是恥骨配置文件,我也順利地拿到了ETag。

回答

3

是,Facebook的圖形API支持HTTP ETags。當您調用Graph API時,您可以提供一個標頭參數,其中包含來自上次調用的值的散列值。如果新值不變,服務器將返回304 Not Modified

Here's a detailed guide

  1. 當你做出一個Graph API調用,響應報頭包含的ETag與在API調用返回的數據的哈希值。取出這個ETag值並在步驟2中使用。
  2. 下次你做同樣的API調用,包括如果 - 無 - 匹配與ETag值請求頭從第1步此API調用拉動。
  3. 如果數據沒有改變,響應狀態代碼將是304 - 未修改並沒有返回數據。
  4. 如果自去年拉的數據發生了變化,將數據返回像往常一樣用新的ETag。拉新的ETag值並用於後續調用。
+0

感謝您的回答。請在嘗試此操作後查看我的原始問題以獲取更新。 – StuStirling 2014-10-30 16:25:09

+0

這可能不適用於圖像等非json響應。你可以嘗試在你的請求中使用'/ me/picture?redirect = false'。 – Nachi 2014-10-30 16:39:31

+0

嗨Nachi,是的工作。在你發佈這個之前就想出了它。我的新問題是如何將If-None-Match添加到「com.facebook.Request」中。有任何想法嗎? – StuStirling 2014-10-30 16:53:11

1

您可以使用實時API來獲取任何改變,它支持檢查資料圖片:https://developers.facebook.com/docs/graph-api/real-time-updates/v2.1

它比你自己檢查定期好得多,因爲Facebook將而不是將更改推送給您,並且您將不會遇到任何API限制問題。根據我的經驗,您會在30秒內收到關於更改的通知,大部分時間更快。

+0

我需要這主要用於Android和iOS應用程序,只需要偶爾檢查。我認爲實時更新可能會有點極端。 – StuStirling 2014-10-30 16:32:09

+0

這不是非常極端,你只會得到通知變化,你永遠不會有這樣的API限制的問題:) - 它絕對是最好的方式,如果你需要對變化作出反應。 – luschn 2014-10-30 16:37:38

相關問題