FB.api не работает при вызове сразу после FB.init - PullRequest
2 голосов
/ 13 декабря 2011

FB.api не работает при вызове сразу после FB.init.Вот фрагмент кода, который я использую:

window.fbAsyncInit = function() {
  FB.init({
    appId : window.APP_ID,
    status : true,
    cookie : true,
    oauth : true,
    channelUrl : window.MASTER_URL + "channel",
    frictionlessRequests : true
  });

  window.COMPANY.init();
};

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

А вот мои COMPANY.init () и COMPANY.fetchAllFriends ():

friends: new Array(),

init : function() {
  // TODO

  COMPANY.fetchAllFriends();

  FB.Canvas.setSize($(document).height());
  FB.Canvas.setAutoGrow();
},    

fetchAllFriends : function() {
  FB.api('/me/friends', function(response) {
    if (!response || response.error) {
      return;
    }

    COMPANY.friends = new Array();
    $.each(response.data, function(index, value) {
      COMPANY.friends.push(value.id);
    });
  });
},

, где в ответе fetchAllFriends содержится ошибка, в которой говоритсяMsgstr "Активный токен доступа должен использоваться для запроса информации о текущем пользователе."Я убедился (через отладчик браузера), что FB.init вызывается перед этим вызовом FB.api.

Любая помощь будет оценена!

Ответы [ 2 ]

5 голосов
/ 14 декабря 2011

Хорошо, я исправил свою проблему. Я изменил:

window.fbAsyncInit = function() {
  FB.init({
    appId : window.APP_ID,
    status : true,
    cookie : true,
    oauth : true,
    channelUrl : window.MASTER_URL + "channel",
    frictionlessRequests : true
  });

  window.COMPANY.init();
};

до:

window.fbAsyncInit = function() {
  FB.init({
    appId : window.APP_ID,
    status : true,
    cookie : true,
    oauth : true,
    channelUrl : window.MASTER_URL + "channel",
    frictionlessRequests : true
  });

  FB.Event.subscribe('auth.login', window.COMPANY.init);
};

на случай, если кто-то еще захочет узнать. Я обнаружил, что FB JS SDK не сформировал пользовательский сеанс к моменту возврата FB.init, поэтому вам нужно подписаться на событие auth.login с помощью функции init. Подробнее здесь

2 голосов
/ 13 декабря 2011

Вы не проверяете статус пользователя.Все, что вы делаете, это инициализируете Facebook, вы даже не знаете, вошел ли пользователь в Facebook или имеет учетную запись Facebook.Вам нужно вызвать FB.getLoginStatus и проверить, подключены ли они.Если они не подключены, нет никакого способа получить токен доступа.Если они подключены, вы получаете токен доступа.

...