我需要下载和存储用户的Facebook图片,因为我们在系统中使用它作为用户帐户图片,就像许多其他应用程序一样。
问题是我不希望每次进入活动会话时都覆盖它。我宁愿做的是检查用户是否自上次检索后更新了他们的个人资料图片。如果他们显然我想更新我在系统中的那个以匹配Facebook上的当前..
我的问题
是否有更新的时间戳或我可以查找的内容,以查看用户的Facebook个人资料图片何时更改?
有更好的方法吗?
更新
继续@Nachi的建议,我向“/ me / picture”图形端点发出了一个Graph 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
我将图形请求的结束标记更改为/ me,这是公共配置文件,我成功获得了ETag。
答案 0 :(得分:3)
是的,Facebook Graph API支持HTTP ETags。当您调用Graph API时,您可以提供一个头参数,其中包含上次调用的值的哈希值。如果新值未更改,服务器将返回304 Not Modified
。
- 当您进行Graph API调用时,响应头包含 ETag ,其值为API调用中返回的数据的哈希值。拉出此ETag值并在步骤2中使用。
- 下次进行相同的API调用时,请包含 If-None-Match 请求标头,并在此API调用中从步骤1中拉出ETag值。
- 如果数据未更改,则响应状态代码将为 304 - 未修改,并且不会返回任何数据。
- 如果数据自上次拉动后发生了变化,则数据会像往常一样以新的ETag返回。拉出新的ETag值并用于后续调用。
醇>
答案 1 :(得分:3)
您可以使用Realtime API进行任何更改,它确实支持检查个人资料图片:https://developers.facebook.com/docs/graph-api/real-time-updates/v2.1
这比定期检查自己要好得多,因为Facebook会将更改推送给您,而您对API限制不会有任何问题。根据我的经验,您会在30秒内收到有关更改的通知,大部分时间会更快。