使用Facebook Graph API获取所有用户好友 - Android

51

我正在尝试获取登录到我的应用程序的用户的所有好友。

我不能使用此API [friends]:

https://developers.facebook.com/docs/graph-api/reference/v2.0/user/friends

因为这个API只返回已经使用该请求的应用的好友。

因此,我找到了这个API [friendlist]:

https://developers.facebook.com/docs/graph-api/reference/v2.0/friendlist

根据这个答案,我得到了好友列表。

但是当我尝试获取好友列表成员时,我得到的是空列表:

new Request(
            session,
            "/2692926356774/members",
            null,
            HttpMethod.GET,
            new Request.Callback()
            {
                public void onCompleted(Response response)
                {
                    /* handle the result */
                    Log.e(LOG_TAG,"Members: " + response.toString());
                }
            }
    ).executeAsync();

2692926356774 是我的熟人列表id,我尝试了几个其他的id,结果都一样。


1
你应该阅读 https://developers.facebook.com/docs/graph-api/reference/v2.0/friendlist/members 。页面顶部有一个大警告,说明它在v2.0中不存在。在v2.0中无法获取所有好友。 - WizKid
警告提到了API v1。那么,有什么替代方案吗? - David
3
请签署API更改请愿书:https://www.change.org/petitions/facebook-platform-team-allow-developers-to-access-the-list-of-friends-from-users-of-their-apps?lang=en-US - vasekt
@WizKid 如果 /{friend-list-id}/members 没有返回任何数据,为什么它还是可用的,为什么这件事没有明确说明?人们会浪费大量时间尝试使其正常工作。 - Apetroaei Andrei
@ApetroaeiAndrei:我不知道,请提交文档错误以便我们删除它。 - WizKid
显示剩余2条评论
1个回答

85
在Graph API的v2.0版本中,调用/me/friends会返回使用该应用程序的人的好友。
此外,在v2.0中,您必须从每个用户请求user_friends权限。 user_friends不再默认包含在每个登录中。每个用户必须授予user_friends权限才能出现在/me/friends的响应中。有关更详细的信息,请参见Facebook升级指南,或查看以下摘要。 /me/friendlists端点和user_friendlists权限不是您想要的。此端点不返回用户的好友-它允许您访问一个人制作的列表,以组织他们的朋友。它不返回这些列表中的好友。当给人们机会发布到Facebook时,此API和权限非常有用,可以允许您呈现自定义隐私选择器。
如果您想访问不使用应用程序的好友列表,则有两个选项:
  1. 如果你想让用户在发布到Facebook的故事中标记他们的朋友,你可以使用/me/taggable_friends API。使用此端点需要Facebook审核,仅应用于呈现好友列表以便用户在帖子中标记他们的情况。

  2. 如果你的应用是游戏,并且支持Facebook Canvas,你可以使用/me/invitable_friends端点来呈现自定义邀请对话框,然后将此API返回的令牌传递给标准请求对话框

在其他情况下,应用程序无法再检索到用户的完整好友列表(只有那些使用“user_friends”权限明确授权您的应用程序的好友)。对于希望允许人们邀请朋友使用应用程序的应用程序,您仍然可以使用Web上的发送对话框或新的iOS上的消息对话框Android

1
我正在使用消息对话框邀请朋友。成功交易后,我获得了交易ID,但消息或文本未发布在朋友的个人资料或动态上!我正在使用v2.2 有任何想法吗? - kb920
https://developers.facebook.com/docs/graph-api/reference/v2.3/friendlist - Kaveesh Kanwal
1
从2.0版本开始,通过公共API实现这一点是不可能的。如果您真的需要这个功能,您唯一的解决方案就是像FLT一样获取用户的主令牌。检索主令牌并不难实现,但这需要用户的登录凭据。通常,没有人会信任使用您的Facebook密码的软件。此外,检索主令牌将从您的服务器注册一个登录会话,因此用户将看到“您的帐户已被访问…”消息,并且很可能他们的帐户将被锁定,他们需要保存浏览器。这违反了Facebook的服务条款! - Петър Петров
谢谢,我添加了权限参数:user_friends,但是Facebook没有提供添加请求的密钥。使用key: friendlists可以解决问题。感谢stackoverflow :) - vrajesh
真正的访问令牌。只有在使用用户名/密码和安全代码/短信/等完整登录后才能获得。现在,当然是未经记录的。你需要完全模拟用户本身登录。这严格违反Facebook的API和条款,但Friends List Tracker网站确实做到了这一点。这当然可以窃取用户的密码,因此不安全。 - Петър Петров
显示剩余6条评论

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