Автоматическая публикация в Facebook на стене с помощью Javascript

У меня есть приложение 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>

person Sharon Haim Pour    schedule 18.08.2011    source источник
comment
Объект FB имеет 0 в свойстве user_id.   -  person Sharon Haim Pour    schedule 18.08.2011


Ответы (3)


Из чтения вашего вопроса и различных комментариев мне кажется, что информация о сеансе пользователя не сохраняется в SDK JavaScript - это предполагает, что на стороне сервера поддерживается действительный сеанс пользователя.

Прежде всего, вы должны убедиться, что используете самую последнюю версию 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'});
    }
});
person jBit    schedule 18.08.2011

Вы не вызываете функцию postToFacebook()!

window.fbAsyncInit = function() {
    FB.init({
      appId  : 'MY APP ID',
      status : true, 
      cookie : true, 
      xfbml  : true 
    });
    postToFacebook();
  };
person seso.at    schedule 18.08.2011
comment
Я вызываю postToFacebook(), я просто не публиковал его. - person Sharon Haim Pour; 18.08.2011
comment
когда ты звонишь? Вы можете быть уверены, что FB уже инициализирован? - person seso.at; 18.08.2011
comment
да. Нужно нажать кнопку, а затем он вызывает postToFacebook. Я поместил метод FB.init в HTML-тег body. - person Sharon Haim Pour; 18.08.2011
comment
как насчет разрешений? они все правильно установлены? - person seso.at; 18.08.2011
comment
да. публикация_поток. Он публикуется на PHP, я хочу, чтобы он работал на Javascript. - person Sharon Haim Pour; 18.08.2011

При попытке сделать это:

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

Вам необходимо передать токен доступа вместе с вызовом. Я предполагаю, что он у вас есть на стороне php/сервера, поэтому:

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