【问题标题】:How to get the full friends list using the Android Facebook SDK如何使用 Android Facebook SDK 获取完整的好友列表
【发布时间】:2015-02-12 07:40:29
【问题描述】:

我正在尝试使用 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() 创建的那个)本质上是空的(图形路径为“null”)。

当我查看第一个请求的响应时,“下一个”标签似乎非常好:

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

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

我的备份计划是跟踪我处理的元素数量,并简单地将“偏移量”添加到我传入的包中。但这会导致第二个请求为空,而它的“下一个”为空。

所以我尝试从第一个请求解析生成的“下一个”字符串并将其所有内容传递到包中,即_after_id、偏移量、限制等......但结果相同 - 空结果,没有“下一个” ”。

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

【问题讨论】:

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


    【解决方案1】:

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

    除此之外,您无法再获得完整的朋友列表,或有关这些朋友的详细信息。

    【讨论】:

    • 从安全/隐私的角度来看,这是有道理的,而且以这种方式工作也很好。在过去(?)的好日子里,那也是 http(没有“s”),你得到了所有的朋友信息,如果你挖了一点,甚至是非朋友信息:)。
    【解决方案2】:

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

    另外,尝试将 request.setParams() 移到 while 之外。如果请求有任何临时状态,您只需覆盖它们。 Facebook 可能会拒绝一个接一个来得太快而无法缓解 DoS 攻击的相同请求。

    【讨论】:

    • 谢谢博格丹!尝试了所有这些,但没有奏效。
    【解决方案3】:

    如果您将 "v2.2" 更改为 "v1.0" ,那么您将得到您想要的,但请注意 1.0 api 即将到期。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多