0

我在我的网站上使用 Facebook 的开放图形 API 和 JavaScript SDK。我的目标是让用户连接到我的网站,然后在我的网站上执行某些操作后,将消息发布到用户的 facebook 流。我的 facebook 连接功能工作得很好。在连接期间,我请求电子邮件、publish_stream、offline_access 权限。我认为这些就是我想要做的所有事情。现在,当用户通过 facebook connect 连接时,我确实获得并捕获了 facebook 访问令牌和秘密,尽管我不知道如何处理它们。

根据 Facebook 的 JavaScript SDK 的劣质文档... 做我想做的事情说使用以下代码:

var body = 'Reading Connect JS documentation';
FB.api('/me/feed', 'post', { message: body }, function(response) {
  if (!response || response.error) {
    alert('Error occured');
  } else {
    alert('Post ID: ' + response.id);
  }
});

我这样做只是作为测试,而不是提醒响应,我正在对 JSON 响应进行字符串化并写入控制台。可以说流发布失败并且响应是这样的就足够了:

{"error":{"type":"OAuthException","message":"An active access token must be used to query information about the current user."}}

如果用户通过 facebook connect “连接”到我的网站并接受了我指定的所有权限,我没有有效的访问令牌吗?访问令牌是我必须传递给 api 调用的另一个参数吗?

4

2 回答 2

1

确保页面中有所有这些:

<BODY>
    <div id="fb-root"></div>
    <script src="http://connect.facebook.net/en_US/all.js"></script>
    <script type="text/javascript">
    FB.init({
      appId  : APP_ID, // the app ID you get when you register your app in http://www.facebook.com/developers/
      status : true, // check login status
      cookie : true, // enable cookies to allow the server to access the session
      xfbml  : true  // parse XFBML
    });

    if (FB.getSession() != null) {
      var body = 'Reading Connect JS documentation';
      FB.api('/me/feed', 'post', { message: body }, function(response) {
        if (!response || response.error) {
          alert('Error occured');
        } else {
          alert('Post ID: ' + response.id);
        }
      });
    }
    </script>
于 2011-04-22T22:40:09.167 回答
1

上面的代码在 publish_stream 权限下对我有用。确保在 javascript api 收到访问令牌之前代码没有运行。跑:

console.log(FB.getSession()) 

直接在 FB.api 调用上方,以确保您拥有 access_token。

于 2011-04-22T22:29:37.303 回答