Подтвердить что ты не робот

FB.getLoginStatus не вызывает обратный вызов

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

В соответствии с:

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

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

Ответ 3

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

Теперь, если по какой-то причине вы зависите от FB api, но вы хотите иметь резервную опцию, если она не работает - обходной путь с таймером должен быть в порядке для вас. Просто настройте таймер и отключите его, если 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);
 }

Ответ 4

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

  window.setTimeout(checkLogStatus, 1000);


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

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

Ответ 5

Если ваше приложение находится в режиме песочницы, 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

В новой версии приложения "Разработчик" вы должны убедиться, что указали правильный URL-адрес, который используете для доступа к приложению в поле "Веб-сайт" под

Выберите, как ваше приложение интегрируется с Facebook

раздела.

Ответ 7

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

Ответ 8

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

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

Ответ 9

Как уже писали другие пользователи, вы должны получить доступ к своему сайту с тем же URL-адресом, который ожидает facebook. Например, если facebook имеет обратный вызов "example.com", но у браузера есть "www.example.com", это может вызвать эту проблему.

Кроме того, если сторонние куки файлы не разрешены вашим браузером, вы также можете увидеть эту проблему. Или вы можете увидеть обратный вызов ошибочно сообщать, что пользователь не подключен.

Ответ 10

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

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

Ответ 11

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

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

введите описание изображения здесь

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