这就是我要找的东西。我已经使用FB.api成功将用户登录到Facebook,现在我需要获取用户的Facebook页面列表(页面状态已经更改为已发布)。我有一个Facebook应用程序,我用来获取Facebook页面列表和一个FB登录按钮,通过它启用用户登录。我的代码看起来像
<!DOCTYPE html>
<html>
<head>
<title>Facebook Login JavaScript Example</title>
<meta charset="UTF-8">
<script type="text/javascript" src="http://code.jquery.com/jquery- 1.7.1.min.js"> </script>
</head>
<body>
<script>
function statusChangeCallback(response) {
console.log('statusChangeCallback');
console.log(response);
if (response.status === 'connected') {
document.getElementById('status').innerHTML = response.authResponse.userID;
document.getElementById('access').innerHTML = response.authResponse.accessToken;
testAPI();
} else if (response.status === 'not_authorized') {
document.getElementById('status').innerHTML = 'Please log ' +
'into this app.';
} else {
document.getElementById('status').innerHTML = 'Please log ' +
'into Facebook.';
}
}
function checkLoginState() {
FB.getLoginStatus(function (response) {
statusChangeCallback(response);
});
}
function testAPI() {
console.log('Welcome! Fetching your information.... ');
FB.api('/me', function (response) {
console.log('Successful login for: ' + response.name);
document.getElementById('status').innerHTML =
'Thanks for logging in, ' + response.name + '!';
FB.api('/me/accounts', 'GET', '', function (response) {
alert("On get");
console.log(response);
if (!response || response.error) {
alert(JSON.stringify(response.error));
}
else {
if (response.data.length > 0) { //-- Check for page list
alert("On page List")
acc_token = response.data[0].access_token; //== Change Accesstoken If a page is exist
}
else {
alert("On NOT");
}
}
});
});
}
</script>
<div id="status"></div>
<div id="access"></div>
<div id="page"></div>
<div id="fb-root"></div>
<script>
(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#xfbml=1&appId=810475512349563& version=v2.0";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<div class="fb-login-button" data-scope="manage_pages" data-max-rows="1" data-size="medium" data-show- faces="false" data-auto-logout-link="false" onlogin="checkLoginState();" ></div>
</body>
</html>
请注意我使用
<div class="fb-login-button" data-scope="manage_pages" data-max-rows="1" data-size="medium" data-show- faces="false" data-auto-logout-link="false" onlogin="checkLoginState();" ></div>
用于用户登录和获取页面列表。但它总是返回&#34; data []&#34;。
答案 0 :(得分:1)
您正在为登录定义2种不同的解决方案:登录按钮AND FB.login。如果要使用Facebook按钮,请选择“登录”按钮,如果要使用自己的“登录按钮”设计,请选择“FB.login”。
话虽如此,登录按钮没有必要的范围参数:
<div class="fb-login-button" data-scope="manage_pages" ...></div>
来源:https://developers.facebook.com/docs/plugins/login-button
不过,您的代码确实存在问题。window.fbAsyncInit
应在页面加载时使用,而不是在按钮点击时使用。并且FB.login是不必要的,因为它在使用登录按钮后被调用。
此外,请确保您正在尝试使用应用管理员的用户,否则您必须先完成审核流程:https://developers.facebook.com/docs/apps/review/login