如何在 Facebook 的 Graph API 版本 2.0 或更高版本中获取用户的用户名

35

我以前可以很容易地在API 1.0中获取用户的用户名,只需使用/me并获取响应对象的username属性。

现在,在API 2.0中出现了以下错误:

"(#12) username已弃用,适用于v2.0及更高版本"

迄今为止,我找到的唯一方法是使用FQL,但现在似乎已经被弃用了。

有没有解决此问题的方法?


可能是获取Facebook Graph API 2.0中的用户名字段的重复问题。 - powtac
3个回答

23

我不是在故意不帮忙,但据我所知,API中的用户名访问已被移除。例如,在旧共享对话框中使用用户名的应用程序现在无法在2.0 API下使用该功能。我认为这也是一种防止应用程序在应用程序范围之外访问可用唯一标识符的方法-您在2.0 API下检索的任何用户ID仅适用于您自己的应用程序。


1
这是我的问题。我想在自己的数据库中识别尚未使用我的应用程序的用户。例如,我在“people”表中有大量记录,每个记录都有一个Facebook用户名。因此,当他们登录我的应用程序时,我将检查是否有一个具有该特定用户名的人,并将其登录。如您所见,我无法使用app_scoped_id,因为这些用户可能从未使用过我的应用程序(但当他们使用时,它们会获得访问权限)。在API 2.0之前,我使用的是全局用户ID,但现在也不再是一个选项。无论如何,感谢您的评论。 - joaopribs
最新的FB API有一个名为“Profile”的类,可以获取您所需的一切。 - Tushar Gogna
1
在4.0 API中,FBSDKProfile类的user_id和name属性不再是所谓的“用户名”。 “name”只是个人的全名,包括名字和姓氏等。 user_id是应用程序范围的ID,而不是通用ID。 废弃通用ID和应用程序访问用户名的选择是出于隐私考虑 - 我们不太可能会访问它们。 最好的想法是下面详细介绍的Business Mapping API。 - giff
这看起来非常落后。 email 仍然可以通过权限获得,并且访问它比公开的用户名/ID更具潜在的破坏性/侵入性。 至少应该使用权限设置使这些属性可用。 - Mike-E

8
我找到了一个简单的解决方法,涉及到向Facebook发送get请求。Facebook将为您提供一个对您的应用程序唯一的ID,而不是用户名。
我发现向https://www.facebook.com/[profile_id] 发送请求,然后会重定向到用户的真实个人资料。用户名可以从重定向URL中提取。
示例:
> curl -i https://www.facebook.com/710290539
HTTP/1.1 301 Moved Permanently
Location: https://www.facebook.com/colinskow

(注:由于我是测试模式中的应用程序所有者,这可能是个例外。如果您能在生产环境下确认,请在评论中告诉我。)

3
看起来 Facebook 已经改变了这个响应。现在在您访问该 URL 之前,它将重定向到登录页面。 - chhantyal
@chhantyal,我没有看到响应中有任何变化,仍然被重定向到用户名。你得到了不同的响应吗? - Noam
我也被重定向到登录页面了。@Noam,你尝试过在未登录的情况下访问此页面吗? - ricardokrieg
您需要先登录才能使用,但是我该如何先登录呢? - Rony Tesler
我仍然可以使用CURL命令行而不必登录来运行它。这意味着它应该可以使用任何HTTP请求API。 - Colin Skow
显示剩余2条评论

5
作为解决方法,您可以使用电子邮件作为唯一标识符。可以使用“email”作为权限范围来检索电子邮件地址。
Facebook已从新的API版本中删除了用户名字段。无法检索用户名。但是,Facebook提供了一个应用程序特定的唯一ID。如果您需要在多个应用程序之间共享同一用户,则可以使用新引入的Business Mapping API。这允许将所有所需的应用程序添加到组中。在这种情况下,ID将在组中的所有应用程序中都是唯一的。
有关Business Mapping API的更多信息,请访问https://developers.facebook.com/docs/apps/for-business 1

1
我的问题是我需要一些东西来识别那些甚至还没有开始使用我的系统的用户。比如,系统管理员会输入“某些东西”来识别Facebook上的用户,当一个用户尝试登录我的系统时,如果这个“某些东西”与我的数据库中的记录匹配,他将被授予访问权限。使用电子邮件确实可以起到作用,但您知道如何获取任何用户的电子邮件吗?如果它还没有使用我的系统,那么它可以由系统管理员输入吗?我以前使用用户名,因为它已经在用户的个人资料URL中了,而且非常容易。 - joaopribs
4
使用电子邮件并不可靠。似乎如果用户将其Facebook电子邮件地址从个人资料中隐藏,就像我所做的那样,Facebook 将无法返回该地址。 - Matt
你确定在FB商务管理器中添加的应用程序范围用户ID在所有应用程序中都是相同的吗?当我通过Graph API调用/me/ids_for_business时,我发现每个应用程序的用户ID都不同。请回答。 - dev-m
并非所有Facebook用户都有电子邮件,他们中的许多人是通过电话注册的。 - gorodezkiy
晚了点留言,但是... 我的做法是:1)为用户创建一个“一次性访问令牌” 2)将该令牌作为 URL 通过电子邮件发送给用户 3)用户点击链接,打开一个页面。用户已经登录到应用程序中 4)我要求用户运行Facebook身份验证,并在回调被调用时将该(受限的、全局的)Facebook ID分配给该特定用户。注意,在步骤(4)中,我会检查该用户ID是否已被“占用”。如果您有兴趣,我有使用Node的Passport的可工作的代码。 - Merc

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