【发布时间】:2015-06-25 12:18:37
【问题描述】:
这在 Stack Overflow 上已被问过很多次,但所有答案都说明了如何将 Facebook 个人资料 ID 转换为 app_scoped_user_id。我的要求正好相反:
- 我有一个
app_scoped_user_id,由 Facebook Graph API 提供。 - 我想要全局个人资料 ID,以便将链接输出到用户的 Facebook 页面。
这是我的 PHP 应用程序的流程:
- 将Facebook Request 转换为
/me,返回Facebook Response - 在响应中,我调用 getGraphObject() 以返回 Facebook Graph Object。
使用我自己的 Facebook 帐户进行身份验证时,这是 Graph 对象的内容:
array (size=11)
'id' => string '1117686364915316' (length=16)
'email' => string 'greg.bowler@g105b.com' (length=21)
'first_name' => string 'Greg' (length=4)
'gender' => string 'male' (length=4)
'last_name' => string 'Bowler' (length=6)
'link' => string 'https://www.facebook.com/app_scoped_user_id/1117686364915316/' (length=61)
'locale' => string 'en_GB' (length=5)
'name' => string 'Greg Bowler' (length=11)
'timezone' => int 1
'updated_time' => string '2015-06-23T10:12:53+0000' (length=24)
'verified' => boolean true
据此,我需要能够提供指向我的 Facebook 帐户的链接。这可以通过知道 Facebook 帐户的 ID 轻松完成,前往 http://facebook.com/profile.php?id=XXXXX 购买,如果您已命名您的帐户,它甚至会重定向到正确的页面。
但是,Graph Object 响应中指定的 ID 不是我的全球 Facebook ID;这是一个app_scoped_user_id,特定于我正在验证的应用程序。
如何将app_scoped_user_id 转换为我帐户的全局 ID?
例如,网站http://findmyfacebookpageid.com/ 就是这样做的,尽管它的源代码已关闭。
我可以将我的app_scoped_user_id 提供给这里的服务:http://findmyfacebookpageid.com/get.php?url=https://www.facebook.com/app_scoped_user_id/1117686364915316
它返回:
{
facebook_id: "100000218905189"
}
为了证明这个问题是可以回答的,我可以使用返回的 facebook_id 值访问我的实际 Facebook 页面,方法是访问 http://facebook.com/profile.php?id=100000218905189
【问题讨论】:
-
“我想要全局个人资料 ID,所以我可以输出到用户 Facebook 页面的链接” – 你不需要全局 ID。您在显示的 API 输出中已经有了一个
link属性,这就是链接到用户配置文件所需的全部内容。当有人在浏览器中访问该 URL 时,Facebook 会自动将他们重定向到“正确”地址。 -
@CBroe 问题在于,跟随应用范围内的用户链接需要用户登录才能查看配置文件。想象一下构建一个像 about.me 这样的社交网络中心,您希望在其中列出公共帐户以供全世界查看。
-
如果我没有登录,facebook.com/profile.php?id=100000218905189 除了你的头像和姓名之外什么也不会显示...如果他们想查看有关您的个人资料的更多详细信息,他们也应该愿意登录 Facebook。
-
@CBroe 如果 Facebook 只是在响应中提供 ID 似乎仍然会更容易,但我同意你关于登录的看法......似乎我被要求运行在 FB 的圈子里完成这样的简单任务。感谢您的意见。
-
如果他们仍然提供全局用户 ID,那么首先引入应用范围内的用户 ID 将毫无意义。
标签: php facebook facebook-graph-api