我正在使用FB.login在我的webapp中使用Facebook登录用户。我正在使用JS SDK和v2.1:
window.fbAsyncInit = function() {
FB.init({
appId: 'FBAPPID',
xfbml: true,
version: 'v2.1',
cookie: true,
status: true,
channelUrl : '/channel.html'
});
console.log('FB Init');
};
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
但是我继续在FB.login response.authResponse中获取用户全局ID,而不是应用程序特定的作用域ID。
FB.login(function(res) {
if (res.authResponse) {
/*
res.authResponse contains: {
accessToken: String,
userID: String* (globalID, not app specific scoped ID)
expiresIn: String,
signedRequest: String
}
*/
} else {
//User canceled or closed Login Dialog
}
}, {
scope: 'email'
});
所以我得到了这个Facebook错误:
The global ID XXXXXXX is not allowed. Please use the application specific ID instead.
我知道使用新的Facebook版本2.1我必须使用范围ID。我想使用作用域特定的应用程序ID,但FB.login只返回全局。 如何转换或获取已记录用户的应用程序特定范围ID?
更新
我正在使用的URL端点示例:
检索用户个人资料:
https://graph.facebook.com/v2.1/USERID?access_token=ACCESSTOKEN
将accessToken交换为longToken:
https://graph.facebook.com/v2.1/oauth/access_token?grant_type=fb_exchange_token&client_id=FBAPPID&client_secret=FBAPPSECRET&fb_exchange_token=ACCESSTOKEN
为了吸引用户之间的共同朋友:
https://graph.facebook.com/v2.1/USERID/mutalfriends/FRIENDID?access_token=ACCESSTOKEN