FB.getLoginStatus не вызывает свой обратный вызов - PullRequest
23 голосов
/ 04 марта 2011

Название действительно говорит само за себя.При некоторых (неопределенных) условиях FB.getLoginStatus () просто перестает работать и не вызывает обратный вызов, который я ему дал.Единственные интересные подсказки, которые я нашел, это

  • FB.Auth._loadState застрял при «загрузке» - все, что должно было заставить его щелкнуть «загружено», не происходит
  • незначительные задержки, такие как alert() вызовы, как правило, заставляют его работать

Любые намеки на то, как даже исследовать это приветствие.

Ответы [ 11 ]

29 голосов
/ 09 июля 2011

Обычно это происходит для меня, когда я запускаю страницу в домене, отличном от того, который был зарегистрирован в Facebook. Как правило, это когда я развиваюсь локально.

Если вы работаете локально, вам нужно настроить локальный веб-сервер, а затем изменить файл хостов, чтобы указать зарегистрированному домену 127.0.0.1 для тестирования на локальном компьютере. Не забудьте удалить эту строку из файла hosts, когда хотите протестировать ее на сервере.

12 голосов
/ 15 сентября 2011

У меня была похожая проблема с FB API.Оказалось, что мое приложение на Facebook было неправильно настроено.Пожалуйста, убедитесь, что это не так для вас.Моя проблема заключалась в том, что мой параметр " Site URL " в приложении FB указывал на https , но я использовал протокол http для разработки.Любой вызов против FB api после FB.init не вызывал мои функции обратного вызова.Поэтому первое, что нужно сделать, - это дважды проверить конфигурацию приложения.

Теперь, если по какой-то причине вы зависите от API FB, но вы хотите иметь запасной вариант на случай, если он не работает - обходной путь с таймером должен бытьподходит тебе.Просто установите таймер и отключите его, если FB Api даст вам правильный ответ.Если нет - отступите к некоторой пользовательской функции, которая будет выполнять некоторую дополнительную логику.

 function callFbApi() {
    var timeoutHandler = setTimeout(function() { requestFailed(); }, 1000);

    function requestFailed() {
        // When this happens, it means that FB API was unresponsive
        doSomeFallbackWork();
        alert('hey, FB API does not work!');
    }

    FB.getLoginStatus(function(response) {
        clearTimeout(timeoutHandler); // This will clear the timeout in case of proper FB call
        doSomeUsualWorkAfterFbReplies();

        return false;
    }, true);
 }
12 голосов
/ 23 июля 2011

Согласно:

https://developers.facebook.com/bugs/240058389381072

Вы не можете перевести свое приложение в режим песочницы, иначе оно не будет работать.Зайдите в настройки вашего приложения, продвиньтесь и включите его.Это поставило меня в тупик на пару часов, пока я не наткнулся на сообщение об ошибке.

6 голосов
/ 11 ноября 2011

Если ваше приложение находится в режиме «песочницы», Facebook действует так, как будто ваше приложение невидимо для всех, кто не указан в списке разработчиков приложений. Если вы не вошли в систему, значит, ваше приложение теперь невидимо.

Обратный вызов сработает только в том случае, если вы инициализируете видимым приложением. В противном случае возвращается следующий ответ:

<span>Application Error: There was a problem getting data for the application you requested. The application may not be valid, or there may be a temporary glitch. Please try again later. </span>

Для получения дополнительной информации, пожалуйста, смотрите мой комментарий к этой ошибке: https://developers.facebook.com/bugs/240058389381072

6 голосов
/ 09 июля 2011

Возможно, вы используете асинхронный вызов. То же самое произошло, когда я позвонил в FB.init с помощью window.fbAsyncInit. Все, что я сделал, это задержал FB.getLoginStatus с помощью функции setTimeout

  window.setTimeout(checkLogStatus, 1000);


  function checkLogStatus(){
          alert("check");
          // fetch the status on load      
          FB.getLoginStatus(handleSessionResponse);
  }

Казалось, что после этого

1 голос
/ 20 мая 2012

У меня была похожая проблема. Сайт работал каждый раз, когда я открывал браузер, но не работал, когда я пытался перезагрузить его.

Причиной была пропущенная буква "www" в имени сайта в настройках Facebook. Обратите внимание, что установка «www» (например, www.yoursite.com) работает в обеих ситуациях (yoursite.com или www.yoursite.com).

1 голос
/ 10 апреля 2012

Убедитесь, что протокол HTTPS , а не HTTP.

1 голос
/ 25 сентября 2011

В новой версии приложения для разработчиков необходимо убедиться, что в поле Веб-сайт под

* 1005 указан правильный URL-адрес, который вы используете для доступа к приложению.* Выберите, как ваше приложение интегрируется с разделом Facebook

.

0 голосов
/ 12 марта 2016

В настройках приложения Facebook перейдите на Настройки OAuth клиента , посмотрите Действительные URI перенаправления OAuth

Убедитесь, что вы перечислили все URI, которые являются доменами, из которых вызывается Facebook SDK. Например:

enter image description here

Я разрабатываю на локальном хосте: 5000 и развертываю в Heroku Обратите внимание на формат: http://domain.name/

0 голосов
/ 20 февраля 2012

Просто опубликовав ситуацию, в которую я звонил FB.getLoginStatus не получил абсолютно никакого ответа.

Мое приложение предназначено для запуска на вкладке, и я только ввел URL-адреса Страница на странице администратора приложения, а не Приложение на Facebook (то есть Canvas). , Вкладка загружается идеально, но любые вызовы FB JS SDK не вызывают ответа.

...