如何使用Android Facebook SDK从Facebook获取好友列表?

10

我已经在Facebook上创建了一个应用程序并完成了一些Facebook SDK的实现。

我的目标是从Facebook获取好友列表,并能够从该列表中选择一些好友并将其导入到我的应用程序中。

我该如何做到这一点?

1个回答

17

您是否想要获取已登录用户在您的应用中的Facebook好友列表?似乎您需要执行Facebook图请求来获取该列表,然后提取您想要的朋友。
https://developers.facebook.com/docs/graph-api/reference/user/friendlists/

如果您想在Android java中完成此操作,请参考以下示例:

    AccessToken token = AccessToken.getCurrentAccessToken();
        GraphRequest graphRequest = GraphRequest.newMeRequest(token, new GraphRequest.GraphJSONObjectCallback() {
            @Override
            public void onCompleted(JSONObject jsonObject, GraphResponse graphResponse) {
                try {
                    JSONArray jsonArrayFriends = jsonObject.getJSONObject("friendlist").getJSONArray("data");
                    JSONObject friendlistObject = jsonArrayFriends.getJSONObject(0);
                    String friendListID = friendlistObject.getString("id"); 
                    myNewGraphReq(friendListID);

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });
    Bundle param = new Bundle();
    param.putString("fields", "friendlist", "members");
    graphRequest.setParameters(param);
    graphRequest.executeAsync();

"成员"是"好友列表"中的一条边,因此您可以使用您的好友列表ID发出新请求,以获取该特定好友列表的成员。 https://developers.facebook.com/docs/graph-api/reference/friend-list/members/

private void myNewGraphReq(String friendlistId) {
    final String graphPath = "/"+friendlistId+"/members/";
    AccessToken token = AccessToken.getCurrentAccessToken();
    GraphRequest request = new GraphRequest(token, graphPath, null, HttpMethod.GET, new GraphRequest.Callback() {
        @Override
        public void onCompleted(GraphResponse graphResponse) {
            JSONObject object = graphResponse.getJSONObject();
            try {
                JSONArray arrayOfUsersInFriendList= object.getJSONArray("data");  
                /* Do something with the user list */
                /* ex: get first user in list, "name" */
                JSONObject user = arrayOfUsersInFriendList.getJSONObject(0);
                String usersName = user.getString("name");
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    });
     Bundle param = new Bundle();
    param.putString("fields", "name");
    request.setParameters(param);
    request.executeAsync();
}

在Facebook Graph请求的文档中,您可以查看有关用户对象可以完成什么操作的内容。不幸的是,我没有足够的声誉来发布另一个链接。

请记住,用户必须使用Facebook登录才能获得所需的访问令牌来执行这些操作。

希望这个回答与您的期望有些相似。

编辑:此方法不再起作用,关于好友列表的第一个链接显示自2018年4月4日起已被弃用。


哇,你真的讲解得非常详细。我不想让用户与Facebook建立关系。我只想为用户启用功能,使他可以从Facebook导入一些朋友的生日信息。我已经在我的MainActivity中放置了一些Facebook图标,当我点击它时,会显示一个新的活动,在这个活动中,我将插入这段代码,对吗? - Dusan Dimitrijevic
实际上,如果您想从好友列表中获取用户的生日,您需要向Facebook请求额外的权限。请查看此处的"user_birthday":https://developers.facebook.com/docs/facebook-login/permissions/v2.5#reference-user_birthday 但是,如果您拥有该权限,您可以执行与上述相同的操作,只需将user.getString("name");替换为user.getString("birthday");但是您说您不想让用户使用Facebook登录或获取任何访问令牌?因为这段代码需要访问令牌才能处理Facebook信息,所以它将无法工作。 - Slagathor
我已经创建了一个数据库,其中存储了我需要的所有内容,我在考虑可以这样做:因为生日日期被存储为字符串,所以我将从获取的Json数组字符串中存储并插入到数据库中。对于姓名和姓氏,我也会采用同样的方法。当我调用你创建的函数时,我应该传递什么字符串作为参数? - Dusan Dimitrijevic
如果您有Google Hangouts,我能加您好友吗?或者我们可以在这里继续聊天,如果您有时间的话,我想问您一些关于Facebook SDK的问题。非常感谢! - Dusan Dimitrijevic
让我们在聊天中继续这个讨论 - Dusan Dimitrijevic
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接