安卓如何获取已安装应用的Facebook好友列表?

7
我正在使用Facebook Android SDK。有没有简单的方法可以获取已下载该应用程序的用户的好友列表?例如,应用程序Draw Something实现了这一点。我似乎找不到任何关于这个主题的信息。
我猜想如果可能的话,需要在httppost中添加一些额外的信息来访问这些信息。

嘿,我也想在ListView中有朋友列表。我已经使用了JPMagalhaes答案下面的第一部分中的请求Facebook朋友方法。但是我不知道如何处理结果。我的意思是如何在ListView中获取结果。我应该用List <GraphUser> users做什么。你可以在这里回答:http://stackoverflow.com/questions/26773639/working-with-facebook-sdk - Hirak Chhatbar
3个回答

54

* 注意:自3.14版本以来,me / friends仅返回使用该应用程序的朋友,因此以下实现已过时。请查看新的“可邀请朋友”或“可标记朋友”API以获取替代方案。

使用新的Facebook SDK for Android(3.0)非常容易获取用户的好友列表。 以下是代码:

private void requestFacebookFriends(Session session) {
    Request.executeMyFriendsRequestAsync(session,
            new Request.GraphUserListCallback() {
                @Override
                public void onCompleted(List<GraphUser> users,
                        Response response) {
                    // TODO: your code for friends here!
                }
            });
}

尽管如此,要获取正在使用您的Facebook应用程序的用户的朋友有点复杂(由于Facebook API文档)。但是是可能的

首先,创建您的请求:

private Request createRequest(Session session) {
    Request request = Request.newGraphPathRequest(session, "me/friends", null);

    Set<String> fields = new HashSet<String>();
    String[] requiredFields = new String[] { "id", "name", "picture",
            "installed" };
    fields.addAll(Arrays.asList(requiredFields));

    Bundle parameters = request.getParameters();
    parameters.putString("fields", TextUtils.join(",", fields));
    request.setParameters(parameters);

    return request;
}

请注意,在您的请求中需要插入字段"installed"。我正在使用同一请求请求用户图片路径。在此处检查您的可能性here
接下来,您可以使用上述代码创建您的请求,然后获取您的朋友:
private void requestMyAppFacebookFriends(Session session) {
    Request friendsRequest = createRequest(session);
    friendsRequest.setCallback(new Request.Callback() {

        @Override
        public void onCompleted(Response response) {
            List<GraphUser> friends = getResults(response);
            // TODO: your code here
        }
    });
    friendsRequest.executeAsync();
}

请注意,使用这个通用请求,你不会收到一个GraphUser列表作为响应。您需要使用以下代码才能将响应作为GraphUser列表获取:
private List<GraphUser> getResults(Response response) {
    GraphMultiResult multiResult = response
            .getGraphObjectAs(GraphMultiResult.class);
    GraphObjectList<GraphObject> data = multiResult.getData();
    return data.castToListOf(GraphUser.class);
}

现在,您可以使用您用户的好友列表,并查看每个好友是否使用您的Facebook应用程序的信息:
GraphUser user = friends.get(0);
boolean installed = false;
if(user.getProperty("installed") != null)
    installed = (Boolean) user.getProperty("installed");

2
+1 对于完整性和正确性,我无法比 @BlakeMiller 更好地表达。 - VansFannel
"installed" 属性是如何工作的?这是否包括授予应用程序读取权限的用户? - Jacek Kwiecień
4
如果你的应用程序是在2014年4月30日之后创建的,那么你只能获取那些也使用你的Facebook应用程序的用户好友。你不能再检索好友列表。 - user782104
1
@agiro,这个答案是2013年的,最后更新于2014年。所以我猜这已经过时了。请查看新的“可邀请好友”或“可标记好友”的API以获取替代方案。 - JPMagalhaes
谢谢。痛苦的是,官方的FB文档也误导了我 :D - agiro
显示剩余5条评论

2
我用以下方式实现了它:
Bundle params = new Bundle();

params.putString("fields", "name, picture, location, installed");

在显示列表项时,在getView()方法中我做了这个。
boolean b = jsonObject.getBoolean("installed");

if (b){
    Log.d("VIVEK",jsonObject.getString("name"));
}

1

谢谢提供额外信息,那么没有办法调用Facebook Graph API来获取正在使用该应用程序的用户吗? - James Fazio
据我发现,您可以执行FQL查询来收集此信息: SELECT uid FROM user WHERE is_app_user=1 and uid IN (SELECT uid2 FROM friend WHERE uid1 = {用户的FB ID}) - Peter Aron Zentai

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