如何获取用户的Facebook页面列表

时间:2014-11-10 10:38:25

标签: facebook facebook-graph-api facebook-javascript-sdk

这就是我要找的东西。我已经使用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;。

1 个答案:

答案 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