所以我正在使用CodeIgniter框架并试图吸引用户朋友。我没有使用身份验证的问题,但是当我尝试让用户朋友使用https://graph.facebook.com/me/friends?fields=gender,id,name&access_token=
中的GET方法时,它返回我的空数组。这是前端代码
<script>
$(function () {
FB.init({
appId: ****, // App ID
channelUrl: '', // Channel File
status: true, // check login status
cookie: true, // enable cookies to allow the server to access the session
xfbml: true // parse XFBML
});
});
jQuery('*[data-action="doFbLogin"]').on('click', function () {
FB.login(function (response) {
if (response.authResponse) {
FB.api('/me/friends', function(response) {
// loading message
var intervalLoading = 0;
setInterval(function() {
intervalLoading = ++intervalLoading % 4;
jQuery('*[data-message="fb_loading"]').html("Connecting, please wait" + Array(intervalLoading + 1).join("."));
}, 400);
// request
jQuery.post('http://www.****.***/ajax/fb_connect', {
"user_id": response.id,
"full_name": response.name,
"first_name": response.first_name,
"last_name": response.last_name,
"email": response.email,
"gender": response.gender,
"token": response.token,
"friends": response.friends,
"current_url": 'http://*****',
"ref_url": 'http://*****'
},
function (data) {
data = JSON.parse(data);
if (data == true) {
jQuery('*[data-message="fb_loading"]').removeAttr('data-message').html('Connected!');
location.reload();
} else {
jQuery('*[data-message="fb_loading"]').removeAttr('data-message').html('Connection failed!');
setTimeout(function(){
location.reload();
}, 2000);
}
}
);
});
} else {
console.log('something went wrong');
}
}, {scope: 'email'});
});
这是我的后端 - 连接:
$data = array(
'fb-config' => array(
'appId' => FACEBOOK_API_ID,
'secret' => FACEBOOK_SECRET
)
);
$this->load->library('facebook', $data['fb-config']);
$data['userData'] = $this->facebook->getUser();
if ( $data['userData'] ) {
try {
$data['user_profile'] = $this->facebook->api('/me');
} catch (FacebookApiException $e) {
$data['user_profile'] = null; // return false, execution terminated.
$this->facebook->destroySession();
}
}
$this->session->set_userdata(array('user_fb_token' => $this->facebook->getAccessToken()));
print_r($this->users_model->getUserFacebookFriends());
exit;
和获取朋友的方法:
public function getUserFacebookFriends()
{
// get facebook friends (crawl)
$graph_link = 'https://graph.facebook.com/me/friends?fields=gender,id,name&access_token=';
$user_friends = file_get_contents($graph_link . $this->session->userdata('user_fb_token'));
$friendsArray = json_decode($user_friends, true);
if ( is_array($friendsArray) ) {
$data = array('friendsArray' => $friendsArray['data']);
} else {
$data = array('friendsArray' => FALSE);
}
return $data;
}
所以我不知道为什么这不起作用,有什么建议吗?
答案 0 :(得分:1)
结果是正确的。自v2.0起,您也只能获得授权您的应用的朋友:https://developers.facebook.com/docs/apps/changelog
这很可能是在stackoverflow上被问到最多的问题,请在询问之前使用搜索选项(google,stackoverflow)。这个帖子中有一个非常详细的答案,例如:Facebook Graph Api v2.0+ - /me/friends returns empty, or only friends who also use my app
答案 1 :(得分:0)
我有同样的问题。您可以使用 FQL 来获取朋友列表。但是FQL 已被弃用,我认为将在2-3个月内停用。 使用v2.0 +,在隐私政治更改后,您可以获得仅已安装您的应用的朋友列表(他们为您的应用授予了权限)。 一般来说,在v2.0之前根据隐私,用户负责自己的帐户和朋友帐户。在v2.0之后,用户只负责自己的个人资料。
使用v2.0,您只能收集朋友列表以向他们推荐您的应用,因此您必须更改应用宣传方式以收集朋友个人资料。
请求如下:
GET /fql?q=SELECT+uid2+FROM+friend+WHERE+uid1=me()&access_token=...
当然可以修改查询,就像这样(你可以添加/删除字段甚至添加子查询):
SELECT+uid,+name,+first_name,+last_name,+pic_big,+birthday_date,+sex,+locale+FROM+user+WHERE+uid+IN+(SELECT+uid2+FROM+friend+WHERE+uid1=me())
但是您的帐户/应用程序必须在2014年注册(我希望我的确无误,但您可以签入文档)