使用Javascript自动将Facebook发布到墙上

时间:2011-08-18 15:09:39

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

我有一个facebook应用程序,其中用户通过PHP进行身份验证并授予应用程序权限,包括publish_stream
在申请过程中,用户正在浏览多个屏幕 在最后一个屏幕上,用户选择是否要在墙上共享帖子 如果他们这样做,应在他们的墙上张贴自动化和格式化的帖子。

我尝试用Javascript做但它没有用。你能看出什么是错的吗?

谢谢! 这是我的代码:

<div id="fb-root"></div>
    <script>
      window.fbAsyncInit = function() {
        FB.init({
          appId  : 'MY APP ID',
          status : true, 
          cookie : true, 
          xfbml  : true 
        });
      };

      (function() {
        var e = document.createElement('script');
        e.src = 'http://connect.facebook.net/en_US/all.js';
        e.async = true;
        document.getElementById('fb-root').appendChild(e);
      }());
    </script>

<script>
    function postToFacebook() {
        var body = '';
        var params = {};
        params['message'] = 'MESSAGE';
        params['name'] = 'NAME';
        params['description'] = '';
        params['link'] = '';
        params['picture'] = 'https://www.URL.com/pic.jpg';
        params['caption'] = 'CAPTION';
        FB.api('/me/feed', 'post', params, function(response) {
          if (!response || response.error) {
           // alert('Error occured');
          } else {
           // alert('Post ID: ' + response);
          }
        });
    }
    </script>

3 个答案:

答案 0 :(得分:1)

通过阅读您的问题和各种评论,我认为用户会话信息不会持久存储到JavaScript SDK中 - 这假设在服务器端维护了有效的用户会话。

首先,您应该检查您是否使用了最新的PHP SDK。要仔细检查下载并安装GitHub的最新版本。 我认为这应该可以解决您的问题,因为包含授权用户会话数据的cookie应该在PHP和JavaScript SDK之间传递。

如果这不起作用,我怀疑用户未在服务器端正确认证。在这种情况下,您可以尝试以下操作。

postToFacebook()之前,您应该检查用户登录状态并在必要时将其登录。例如:

FB.getLoginStatus(function(response) {
    if (response.authResponse) {
        // logged in and connected user, someone you know
        postToFacebook();
    } else {
        // no user session available, someone you dont know
        FB.login(function(response) {
            if (response.authResponse) {
                // logged in and connected user
                postToFacebook();
            } else {
                // User cancelled login or did not fully authorize
            }
        }, {scope: 'YOUR,REQUIRED,PERMISSIONS'});
    }
});

答案 1 :(得分:0)

您没有调用函数postToFacebook()

window.fbAsyncInit = function() {
    FB.init({
      appId  : 'MY APP ID',
      status : true, 
      cookie : true, 
      xfbml  : true 
    });
    postToFacebook();
  };

答案 2 :(得分:0)

当您尝试执行此操作时:

FB.api('/me/feed', 'post', params, function(response) { ..  });

您需要将访问令牌与呼叫一起传递。我假设你在php / server端有它,所以那么:

FB.api('/me/feed/access_token='[INSERT_ACCESS_TOKEN], 'post', params, function(response) { ..  });