使用JS SDK在Facebook上构建应用程序

Building an app on Facebook using JS SDK

本文关键字:构建 应用程序 Facebook JS SDK 使用      更新时间:2023-09-26

我试图在Facebook上建立一个简单的"应用程序",将根据用户是否"喜欢"我的页面显示替代内容。

  1. 为什么下面的JS不工作(不发送响应)。没有Response = no like, array = Response)?当我处理查询时FB查询测试仪它工作。
  2. 为什么会产生以下错误?

    <div id="fb-root"></div>
    <script src="http://connect.facebook.net/en_US/all.js"></script>
    <script>
      FB.init({
        appId  : 'APP_ID',
        status : true, // check login status
        cookie : true, // enable cookies to allow the server to access the session
        xfbml  : true, // parse XFBML
        channelUrl : 'http://domain.com/tab/', // channel.html file
        oauth  : false // enable OAuth 2.0
      });
     (function($) {
      var session = FB.getSession();
          FB.api({
               method: 'fql.query',
               query: 'SELECT uid, page_id FROM page_fan WHERE uid=me() AND page_id=APP_ID'
          },
       function(response) {
          if(response instanceof Array && response.length > 0)
              alert("YOU LIKE US!");
          else
              alert("YOU DON'T LIKE US YET!");
       });
     })(jQuery);
    </script>
    
误差

Object { error_code="104", error_msg="Requires valid signature", request_args=[7]}

EDIT你不应该需要<script src="http://connect.facebook.net/en_US/all.js"></script>,除非你正在运行一个带有Facebook connect的应用程序(一个不会在Facebook上运行的应用程序)。许多移动应用程序就是一个很好的例子。更多信息请看这个SO问题。任何通过标签页或Facebook页面运行的应用程序都不使用Facebook connect。

你可能想尝试使用我向你展示的init方法,而不是你正在使用的方法。它看起来像这样:

你的HTML页面

<body>
<!-- Code -->
<!-- FB Required -->    
<div id="fb-root"></div>
<script type="text/javascript">iframeReady();</script>
</body>

JS文件

function iframeReady(){
    //Facebook iFrame include
    window.fbAsyncInit = function () {
        FB.init({ appId: 'YOURAPPID', status: true, cookie: true, xfbml: true });
        FB.Canvas.setAutoResize();
        loginUser();
    };
    (function () {
        var e = document.createElement('script');
        e.async = true;
        e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
        document.getElementById('fb-root').appendChild(e);
    } ());
}
根据你的页面设置,你可能还需要一件事(我应该早一点注意到),那就是获得用户喜欢的扩展权限。
/*
 * Logs in a user.
 */
function loginUser() {
    FB.login(function (response) {
        if (response.session) {
            if (response.perms) {
                //User has logged in and accepted permissions
            } else {
                //User did not accept permissions 
            }
        } else {
            //User did not login
        }
    }, { perms: "user_likes" });
}

你也可以查看FB.getLoginStatus

FB.getLoginStatus(function(response) {
  if (response.authResponse) {
    // logged in and connected user, someone you know
  } else {
    // no user session available, someone you dont know
  }
});

您正在使用FB。getSession,它不应该在页面加载时使用。从该链接:

注意:永远不要在页面加载时使用此方法。一般来说,如果你不确定,使用FB.getLoginStatus()会更安全。

一旦你有了权限,你应该能够进行查询调用(假设它是正确的)。

如果这不能解决任何问题,那么请确保所有应用程序设置都是正确的(确切的URL,应用程序Id等)

如果这都是正确的,那么问题是与您的查询。告诉我,我看看能不能找到问题

你必须在fql的每个请求中包含你的access_token,这之前不是命令,但现在是。

Facebook是这么说的:

GET /fql?q=SELECT+uid2+FROM+friend+WHERE+uid1=me()&access_token=...

在API请求中添加access_token。

  FB.api({
       method: 'fql.query',
       access_token : [YOUR TOKEN],
       query: 'SELECT uid, page_id FROM page_fan WHERE uid=me() AND page_id=APP_ID'
  },