如何使用Android Facebook SDK获取完整的朋友列表

时间:2015-02-12 07:40:30

标签: android facebook-graph-api android-facebook

我试图使用Facebook Android SDK 3.23.0获取所有朋友的列表。

我只得到前20个结果,当我试图转到下一页时,我得到一个空的结果。

以下是代码:

    Request.GraphUserListCallback callback = new Request.GraphUserListCallback() {
        @Override
        public void onCompleted(List<GraphUser> graphUsers, Response response) {
            parseFriends(graphUsers);
        }
    };

    Bundle params = new Bundle();
    params.putString("fields", "id, name");
    Request request = Request.newMyFriendsRequest(mSession, callback);

    while (request != null) {
        request.setParameters(params);

        Response response = request.executeAndWait();

        if (response.getError() != null) {
            Log.e(TAG, "Error in request: " + response.getError().toString());
            break;
        } else {
            request = response.getRequestForPagedResults(Response.PagingDirection.NEXT);
        }
    }

这不起作用,第二个请求(由getRequestForPagedResults()创建的请求)基本上是空的(图形路径是&#34; null&#34;)。

当我查看第一个请求的响应时,&#34; next&#34;标签似乎很好:

https://graph.facebook.com/v2.2/625641456/friends?fields=id,name&format=json&access_token=[TOKEN]&limit=25&offset=25&__after_id=[ID]

(我很想知道为什么当第一个请求只返回20个结果时偏移量是25。我使用默认限制,我认为是25)。

我的备份计划是跟踪我处理的元素数量,只需添加&#34; offset&#34;进入我传入的包中。但是这会导致第二个请求为空,并且&#34; next&#34;为空。

所以我尝试解析结果&#34; next&#34;来自第一个请求的字符串,并将其所有内容传递到包中,即_after_id,offset,limit等...但结果相同 - 结果为空,没有&#34; next&#34;。

如何正确检索完整的朋友列表?

3 个答案:

答案 0 :(得分:4)

简单回答:这是不可能的。 Facebook删除了检索朋友数据的选项。唯一的例外是来自使用相同应用程序的朋友,所以在我的所有朋友中,有20个显然正在使用我的应用程序,而那些是我从查询中找到的人。

除此之外,你不能再获得完整的朋友列表,或者有关这些朋友的详细信息。

答案 1 :(得分:1)

尝试将限制从25设置为无限制(或非常大的限制),并将其余代码保持原样。我在旧版本中使用SDK,并且它有时以特殊的方式工作(但我倾向于记住我正在完整地获取朋友列表,无论其大小如何)。

另外,尝试在while之外移动request.setParams()。如果请求有任何临时状态,则只需覆盖它们。 Facebook可能会拒绝一个接一个地过快的相同请求来缓解DoS攻击。

答案 2 :(得分:0)

如果您将“v2.2”更改为“v1.0”,那么您将获得所需内容,但请注意1.0 api即将过期。