在Graph API 2.0中
当我使用新的图形api访问我的朋友信息时,我收到了以下信息。
此处,xxx是用户ID。
{
"error": {
"message": "The global ID xxx is not allowed. Please use the application specific ID instead.",
"type": "OAuthException",
"code": 2500
}
}
什么是应用程序特定ID? 至少,文档中没有任何内容。 (如果我使用Graph API 1.0,一切都会好的。)
答案 0 :(得分:18)
以下摘自a blog post我就此主题撰写的文章回答了您的问题:
在v1.0的简单日子里,当Graph API报告用户时,它提供的id值是该Facebook用户的全局ID号。这些值在客户端应用程序之间可以共享的意义上是“全局的”。在v2.0中,
/user
端点及其子端提供的所有用户数据都使用特定于应用程序的ID。这些ID不仅是Facebook用户的唯一标识符,而且是客户端 - 用户对的唯一标识符。这意味着您无法在应用程序之间共享用户ID。 (尽管Facebook确实provide an API用于在属于单一组织的应用程序之间进行映射。)这一事实的一个重要结果是,您用于开发的Facebook应用程序识别的用户ID与您的生产应用程序识别的用户ID不匹配。因此,如果您将用户的Facebook ID存储在生产中的数据库中,您将无法将该数据库中的用户与开发中的API返回的数据进行匹配。那太烦人了!
没有办法绕过它。您只需从开发应用程序中查询一些朋友,并在开发数据库中手动覆盖存储的Facebook ID。这将给你一些反对的例子。
答案 1 :(得分:1)
为了轻松解决这个问题,我刚刚添加了"版本:' v1.0' "在我的FB.init中这样:
window.fbAsyncInit = function() {
FB.init({
appId: '*****',
cookie : true, // enable cookies to allow the server to access
// the session
xfbml : true, // parse social plugins on this page
version : 'v1.0' // use version 2.0
});
};
当然这是暂时的,需要按照Asymmetric
的建议查看不同的文档答案 2 :(得分:0)
对于使用API 2.0版的应用 - 您只能使用App-Scoped-ID在v2.0 +上访问有关用户的数据
如果您是将某些通话从v1.0升级到v2.0的现有应用,则可以继续使用您为您应用的用户收到的用户ID - 适用于您应用的非用户如果要访问其数据,则必须使用应用程序范围的ID,并从提供该ID的同一应用程序进行调用
有关App Scoped ID如何在这里工作的更多信息:https://developers.facebook.com/docs/apps/changelog#v2_0_graph_api
答案 3 :(得分:-1)
这是因为您使用应用访问令牌而不是用户访问令牌
中的用户令牌如果可行,您需要考虑获取用户access token from your app。您可以为用户提供提示,并在redirect_uri参数
上接收代码作为参数https://www.facebook.com/dialog/oauth?client_id={app-id}&redirect_uri={redirect-uri}
收到该代码后,您可以将其兑换为具有以下请求的用户访问令牌:
GET https://graph.facebook.com/oauth/access_token?client_id={app-id}&redirect_uri={redirect-uri}&client_secret={app-secret}&code={code-parameter}
答案 4 :(得分:-1)
全局ID是您的用户ID,特定于应用程序的ID是您能够访问的ID(没人知道)!此消息表示Facebook无权访问您的个人资料,无法对您的应用程序进行身份验证!换句话说,您需要为用户提供访问令牌,为应用程序提供访问数据的适当权限。您可以在此处使用Graph API Exlorer手动获取短期访问令牌https://developers.facebook.com/tools/explorer 要访问您的朋友信息,您必须授予user_friends权限。有关访问令牌及其生活的更多信息,请访问:https://developers.facebook.com/docs/facebook-login/access-tokens