【问题标题】:How to get user's username in v2.0 or later of Facebook's Graph API如何在 Facebook 的 Graph API v2.0 或更高版本中获取用户的用户名
【发布时间】:2014-06-20 19:07:02
【问题描述】:

我过去很容易在 API 1.0 中获取用户的用户名,使用 /me 并获取响应对象的 username 属性。

现在我在使用 API 2.0 时遇到此错误:

"(#12) 用户名​​已弃用 v2.0 及更高版本"

到目前为止,我发现获得此功能的唯一方法是使用 FQL,但现在它似乎已被弃用。

有没有办法解决这个问题?

【问题讨论】:

标签: facebook-graph-api facebook-graph-api-v2.0


【解决方案1】:

我的意思不是无益,但据我所知,对用户名的访问似乎已从 API 中删除。在与 2.0 API 一起使用时,应用程序可能一直在使用用户名的地方(例如在旧的共享对话框中)不能再这样做了。我认为这也是一种防止应用访问应用范围之外的可用唯一标识符的方法 - 您在 2.0 API 下检索的任何用户 ID 都特定于您的应用。

【讨论】:

  • 这是我的问题。我想在我自己的数据库中识别尚未使用我的应用程序的用户。就像我在 people 表中有一堆记录,每条记录都有一个 Facebook 的用户名。因此,当他们登录我的应用程序时,我会检查是否有人使用该特定用户名,然后让他登录。如您所见,我无法使用 app_scopped_id 因为这些用户可能从未使用过我的应用程序(但他们会当他们这样做时可以访问)。在 API 2.0 之前,我使用的是全局用户 ID,这也不再是一个选项。无论如何,感谢您的评论。
  • 最新的 FB API 有一个名为“Profile”的类,它可以得到你需要的一切。
  • 4.0 API 中的 FBSDKProfile 类的 user_id 和 name 属性已经不是以前所说的“用户名”了。 "name" 只是人的全名,结合了名字和姓氏等。 user_id 是应用范围的 ID,而不是通用 ID。弃用应用程序访问通用 ID 和用户名的选择是一种隐私选择——我们不太可能访问它们。最好的想法是下面详述的业务映射 API。
  • 这看起来非常落后。 email 仍然可以通过许可获得,并且访问它比公开可用的用户名/ID 更具潜在的破坏性/侵入性。至少这些属性似乎可以通过权限设置获得。
【解决方案2】:

我找到了一个简单的解决方法,它涉及到 Facebook 的获取请求。 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

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

【讨论】:

  • 看起来 Facebook 已经改变了这种反应。现在它会在您访问该网址之前重定向到登录。
  • @chhantyal 我没有看到该响应有任何变化,仍然被重定向到用户名。你得到了不同的回应吗?
  • 我也被重定向到登录页面。 @Noam 您是否尝试在未登录的情况下访问此页面?
  • @ricardokrieg 我做到了。它奏效了,但只有一段时间。
  • 您需要先登录,然后才能使用,但是我如何先登录呢?
【解决方案3】:

作为一种解决方法,您可以使用电子邮件作为唯一标识符。可以使用“电子邮件”作为权限范围来检索电子邮件地址。

Facebook 已从新 API 版本中删除用户名字段。无法检索用户名。但是 Facebook 提供了一个特定于应用程序的唯一 ID。如果您需要在多个应用程序之间共享同一个用户,您可以使用新引入的 Business Mapping API。这允许将所有必需的应用程序添加到组中。在这种情况下,ID 在组中的所有应用程序中将是唯一的。

有关业务映射 API 的更多信息,请访问 https://developers.facebook.com/docs/apps/for-business 1

【讨论】:

  • 我的问题是我需要一些东西来识别甚至没有开始使用我的系统的用户。就像,系统管理员会在 facebook 中输入识别用户的“某事”,并且当用户尝试登录我的系统时,如果该“某事”与我数据库中的记录匹配,他将被授予访问权限。使用电子邮件确实可以,但是您知道如何获取任何用户的电子邮件,如果它还没有使用我的系统,那么系统管理员可以输入吗?我之前使用了用户名,因为它已经在用户的个人资料 URL 中,而且非常简单。
  • 使用电子邮件不可靠。似乎如果用户像我所做的那样从他们的时间线中隐藏他们的 Facebook 电子邮件,Facebook 将不会返回它。
  • 您确定在 FB 业务管理器中添加的所有应用中,应用范围内的用户 ID 都相同吗?当我通过图形 api 调用 /me/ids_for_business 时,我看到每个应用程序的用户 ID 不同。请回答。
  • 并非所有 facebook 用户都有电子邮件,其中许多是通过电话注册的
  • 迟到的评论,但仍然...... 所做的是:1)我为用户 ID 创建一个“1 次访问令牌”2)我发送该令牌通过电子邮件作为 URL 发送给用户 3) 用户单击它,打开一个页面。用户已经登录到应用程序 4) 我要求用户运行 Facebook 身份验证,当回调被调用时,我将那个(范围的,应用程序范围的)Facebook ID 分配给那个特定的用户。请注意,在 (4) 中,我将检查用户 ID 是否已被“占用”。我有这方面的工作节点代码,如果你有兴趣,可以使用节点的护照
猜你喜欢
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
  • 1970-01-01
  • 2014-11-21
  • 1970-01-01
  • 2015-05-22
  • 2014-06-19
  • 1970-01-01
相关资源
最近更新 更多