2014-10-30 68 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

相关问题