我正在尝试使用facebook graph api获取测试用户的朋友,但它只返回朋友的ID,但不返回其他详细信息,如first_name,last_name等。这适用于真实用户。我特意传递了我需要的字段(请求看起来像这样):
https://graph.facebook.com/me/friends?access_token=...&fields=id%2Cfirst_name%2Clast_name%2Cgender%2Clocale%2Clink%2Clocation%2Cbirthday%2Creligion%2Crelationship_status
访问令牌是测试用户登录我的应用程序时授予测试用户的令牌。
我发现了类似的SO帖子,但我不确定建议的解决方案是什么。
答案 0 :(得分:1)
您需要使用应用access_token
,这可以通过执行以下操作在图谱API资源管理器中进行测试:
access_token
APP_ID/accounts/test-users?access_token=app_access_token
这将检索测试用户TEST_USER_ID/friends?fields=first_name,last_name,gender&access_token=app_access_token
<强>更新强>:
根据下面的评论,我试图检索测试用户的朋友的生日,但结果不一致。
access_token
ID,生日和性别已被检索,但不名称access_token
:检索了ID,姓名和性别,但不生日这是一个简单的代码:
<html xmlns:fb="http://www.facebook.com/2008/fbml">
<head></head>
<body>
<div id="fb-root"></div>
<script>
// You can retrieve this from: https://developers.facebook.com/tools/access_token/
var app_access_token = "APP_ACCESS_TOKEN";
window.fbAsyncInit = function() {
FB.init({
appId : 'APP_ID_HERE', // App ID
channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
oauth : true, // enable OAuth 2.0
xfbml : true // parse XFBML
});
// Additional initialization code here
};
// Load the SDK Asynchronously
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
</script>
<table id="friends">
<tr>
<th>ID</th>
<th>Name</th>
<th>Gender</th>
<th>Birthday</th>
</tr>
</table>
<script>
function login(app) {
FB.login(function(response) {
if (response.authResponse) {
var obj = {fields: 'name,gender,birthday', limit: 500};
if(app)
obj.access_token = app_access_token;
FB.api('/'+response.authResponse.userID+'/friends', 'GET', obj, function(response) {
console.log(response);
if(response && response.data.length) {
var html = '';
for(var i=0; i<response.data.length; i++) {
html += "<tr>";
html += "<td>" + response.data[i].id + "</td>";
html += "<td>" + response.data[i].name + "</td>";
html += "<td>" + response.data[i].gender + "</td>";
html += "<td>" + response.data[i].birthday + "</td>";
html += "</tr>";
}
document.getElementById("friends").innerHTML += html;
}
});
} else {
console.log('User cancelled login or did not fully authorize.');
}
}, {scope: 'user_birthday,friends_birthday'});
}
</script>
<button onclick="login();">List Friends With User Token</button>
<button onclick="login(1);">List Freinds With App Token</button>
</body>
</html>
使用我的一个测试用户帐户的结果:
前三行是使用“使用用户令牌列出朋友”检索的,其余部分是使用“ List Freinds With App Token ”检索的。
底线,这需要Facebook关注!