我对以任何形式使用FQL都很陌生,对不起,如果这是一个简单的问题,但我似乎无法绕过它。
我有这个代码正在尝试获取朋友列表:
var query = FB.Data.query('SELECT '+response.id+', '+response.name+' FROM friendlist from user where uid=' + response.id);
但我不断回复的反应是
“必须使用活动访问令牌来查询有关当前用户的信息。”
当我从/ me查询中撤回响应对象时,我会看到我的所有信息,例如位置,名称,工作等。但是我没有看到任何访问令牌
代码开头如下:
window.fbAsyncInit = function() {
FB.init({appId: '12...0', status: true, cookie: true, xfbml: true});
/* All the events registered */
FB.Event.subscribe('auth.login', function(response) {
// do something with response
login();
});
FB.Event.subscribe('auth.logout', function(response) {
// do something with response
logout();
});
FB.getLoginStatus(function(response) {
if (response.session) {
// logged in and connected user, someone you know
login();
}
});
如何获取访问令牌并提供FQL查询?
提前感谢任何建议!
答案 0 :(得分:4)
用户成功登录后,您必须使用访问令牌才能对Graph API(包括FQL查询)执行所有类型的请求。
如果您使用的是firebug,请在用户登录后执行console.log(response)
查看您收到的对象。
FB.Event.subscribe('auth.login', function(response) {
console.log(response);
// do something with response
login();
});
它应包含3个属性:perms
,session
和status
。 perms
包含一个列表,其中包含用户授予的权限,status
它是当前用户的状态。对您来说重要的是session
属性。这个也是一个对象,其中包含access_token
属性(字符串),您可以使用它来向API发出请求。
因此,您的查询可能如下所示:
var query = FB.Data.query('SELECT '+response.id+', '+response.name+' FROM friendlist from user where uid=' + response.id + '&access_token='+response.session.access_token);
如果您想以更好的方式获取会话,请使用FB.getSession
,它将返回当前会话。更多信息here。