【问题标题】:Unable to access user's username using Facebook api 2.0无法使用 Facebook api 2.0 访问用户的用户名
【发布时间】:2014-05-15 06:14:52
【问题描述】:

我正在使用facebook api 2.0 允许用户使用他们的 Facebook 个人资料数据来填写我的自定义表单。 (我不想要 facebook 的预填表格)。我正在获取其他信息,例如名字、姓氏、电子邮件。但显然 Facebook api 2.0 已经从响应对象中删除了用户名,我无法访问它。我观察到 Response.link 包含此人的个人资料的 url,"www.facebook.com/" 之后的部分与用户名相同。如果我们成功获取链接,我们可以获得用户名。但我不确定这是否适用于所有用户。但是,当我尝试访问该链接时,我得到了带有应用范围 id 的链接,如下所示:

"www.facebook.com/app_scoped_user_id/XXXXXX/"  

最后一部分 (XXXXXX) 是一些数字 id。有人知道如何访问“https://www.facebook.com/username”形式的链接吗?

另外,如果我们在 2.0 中无法做到这一点,但在 1.0 中可以,那么如何切换回 1.0?

【问题讨论】:

  • 你想只获取当前授权用户的用户名还是任何用户?
  • 当前授权用户的用户名。当他访问页面时,他将获得选项,例如“使用 Facebook 注册”。当他点击它时,他将有机会使用 Facebook 登录对话框验证自己。成功登录后,我想访问他的用户名。
  • 一旦您将 v2.0 推送到生产环境,并且真正的用户已经连接到它,您将无法切换回 v1.0,因为涉及这些用户的 /user 调用将被解释为 v2 .0 无论您指定什么版本。这里有一些陷阱,我也发现它们令人困惑,所以我写了一个blog post 来解释它们。

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


【解决方案1】:

正如https://developers.facebook.com/docs/apps/changelog#v2_0_api_versions 明确指出的那样

/me/username 不再可用

如果您的应用是在 2014 年 4 月 30 日之后创建的,则无法切换回 v1.0。如果没有,您可以在请求前添加 /v1.0,但这仅在 2015 年 4 月 30 日之前有效。

【讨论】:

  • 好吧,那么您的应用是在 2014 年 4 月 30 日之后创建的。我认为您不可能获得username。无论如何,你为什么特别需要这个?例如不能使用user_id 吗?
  • 如果我用用户的 Facebook 用户名填写我的用户名字段,而用户 ID 是数字且难以记住,这将对我有所帮助。例如例如,johnbrown 比 452864562822 更容易记住。 Facebook 用户名也将是唯一的。
  • 然后例如使用first_namelast_name 的串联。在这里看不到问题...事实上,您无法再获得username,因此我建议您尝试找到另一个合适的解决方案,而不是尝试获得一些接下来无论如何都将无效的解决方法年
  • 如果我们能够访问链接属性,我们可以获得用户名。不幸的是,我得到了问题中提到的范围 ID 的链接。
  • 我觉得这没什么用。创建一个干净的解决方案,而不是解决方法。
【解决方案2】:

如果您只需要当前授权用户的用户名(或您的应用的任何其他授权用户),那么这是可能的。

第一步,调用 /v2.0/me?fields=third_party_id 端点。您必须使用授权的用户访问令牌(授权基本范围,即 public_profile 权限足够)。

或者其他方式,您可以使用 App Access Token 代替。当然你不能再使用 me 连接了,你必须明确输入用户 ID。例如,12345678 显示在以下屏幕截图中:

第二步,使用 App Access Token (User Access Token is not allowed here) 调用以下 FQL 查询:

从标准用户信息中选择用户名,其中第三方 ID = 'example12345abcdef'

其中“example12345abcdef”是您从第一步获得的third_party_id示例。

p/s:请注意,第一步的用户/应用访问令牌必须在第二步使用相同的应用。这是因为 third_party_id 与应用绑定。

干杯:)

【讨论】:

  • 非常感谢您的详细解答。不幸的是,我无法使用服务器端代码来获取应用访问令牌。
  • FQL 在 v2.1 之后被弃用:/
【解决方案3】:

请注意,username 在 Facebook 上是可选的。默认情况下,Facebook 个人资料没有用户名

在任何 Facebook API 响应中,您都会获得用户名,前提是用户已在其 Facebook 设置下设置了用户名。

【讨论】:

    【解决方案4】:

    如果您只需要向用户显示他的姓名,为什么不使用“姓名”字段?它包含他们的名字和姓氏。我已将我的应用程序更改为使用名称而不是“用户名”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-29
      • 2016-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-10
      • 1970-01-01
      相关资源
      最近更新 更多