【问题标题】:Check if User's Facebook Profile Has Been Updated检查用户的 Facebook 个人资料是否已更新
【发布时间】:2014-10-31 01:46:49
【问题描述】:

我需要下载和存储用户的 Facebook 图片,因为我们在系统中使用它作为他们的用户帐户图片,就像许多其他应用程序一样。

问题是我不想在每次获得活动会话时都覆盖它。我宁愿以某种方式检查用户自上次检索后是否更新了他们的个人资料图片。如果他们有,那么显然我想更新我们系统中的一个以匹配 Facebook 上的当前一个..

我的问题

当用户的 Facebook 个人资料图片更改时,是否有更新的时间戳或我可以查看的内容?

有没有更好的办法?

更新

按照@Nachi 的建议,我向“/me/picture”图形端点发出了图形 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。

【问题讨论】:

    标签: android facebook facebook-graph-api


    【解决方案1】:

    您可以使用实时 API 进行任何更改,它确实支持检查头像:https://developers.facebook.com/docs/graph-api/real-time-updates/v2.1

    这比您自己定期检查要好得多,因为 Facebook 会将更改推送给您,而您不会遇到 API 限制的任何问题。根据我的经验,您最多可以在 30 秒内收到有关更改的通知,大多数情况下要快得多。

    【讨论】:

    • 我需要这个主要用于 Android 和 iOS 应用程序,只需要偶尔检查一下。我认为实时更新可能有点极端。
    • 这并不是很极端,无论如何您只会收到更改通知,并且您永远不会遇到 api 限制问题:) - 如果您需要做出反应,这绝对是最好的方法变化。
    【解决方案2】:

    是的,Facebook Graph API 支持HTTP ETags。当您调用 Graph API 时,您可以提供一个标头参数,其中包含上次调用的值的哈希值。如果新值不变,服务器会返回一个304 Not Modified

    Here's a detailed guide:

    1. 当您进行 Graph API 调用时,响应标头包含 ETag,其值是 API 调用中返回的数据的哈希值。提取此 ETag 值并在第 2 步中使用。
    2. 下次您进行相同的 API 调用时,请包含 If-None-Match 请求标头以及从步骤 1 中提取的此 API 调用的 ETag 值。
    3. 如果数据没有变化,响应状态码为304 – Not Modified,不返回任何数据。
    4. 如果自上次提取后数据已更改,则数据将照常返回,并带有新的 ETag。拉取新的 ETag 值并用于后续调用。

    【讨论】:

    • 感谢您的回答。请在尝试此操作后查看我的原始问题以获取更新。
    • 这可能不适用于图像等非 json 响应。您可以尝试在请求中使用/me/picture?redirect=false
    • 嗨,Nachi,是的,确实有效。在你发布这个之前想通了。我的新问题是如何将 If-None-Match 添加到com.facebook.Request。有什么想法吗?
    • 基于对Request 类的快速浏览,也许这会起作用:构造一个Request 对象。然后在这个对象上调用toHttpConnection。最后,使用setRequestProperty(key, value) 将标头添加到HttpURLConnection 对象,然后执行它。不过,这似乎不必要地复杂,如果您找到更简单的方法,我很想知道。
    • 我需要执行 HttpURLConnection 而不是请求,除非我可以将请求的连接设置回修改后的连接?我同意,这样做的垃圾方式,但目前似乎无法找到另一种方式
    猜你喜欢
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多