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

FB.getLoginStatus не выполняет функцию обратного вызова

У меня сложная проблема. Трудные средства Я искал через сеть и StackOverflow, а также всю документацию FBJS SDK и не нашел ответа.

Я создаю приложение Tab страницы, где я хотел бы позволить фанатам участвовать в событиях rsvp. Поэтому я должен проверить, вошел ли пользователь в систему, а если нет, мне нужно войти в систему. Это звучит довольно просто, но FB.getLoginStatus не выполняет функцию обратного вызова. Это выдержка кода:

FB.init({
   appId: window.appID,
   status: true,
   xfbml: true,
   cookie: true,
   oauth: true,
   channelUrl: 'http://example.com/fb/channel.html'
 }); 

а затем я просто - конечно, после того, как пользователь нажмет на кнопку - вызовите FB.getLoginStatus, но, похоже, ничего не делает.

Я уже проверял режим песочницы, успех FB.init, URL-адреса в настройках приложения и среды разработки. Я могу вызвать FB.ui, хотя FB.ui с методом: "oauth" Я получаю сообщение об ошибке: "Параметр" redirect_uri "не может использоваться в сочетании со" следующим "параметром, который устарел.". Это очень странно, потому что я не использовал параметр "Следующий". Но когда я устанавливаю рядом с undefined, он отлично работает, я получаю окно, но он говорит: "Данный URL-адрес не разрешен конфигурацией приложения". Ожидайте, что я могу войти, тогда у меня есть access_token. Но в новом окне getLoginStatus все еще ничего не делает.

Поэтому любые советы приветствуются.

Спасибо, Тамас

ОБНОВЛЕНИЕ:

function onBodyLoad() { //on body onload
    FB.init({
     appId: window.appID,
     status: true,
     xfbml: true,
     cookie: true,
     oauth: true,
     channelUrl: 'http://example.com/fb/channel.html'
    });     
   }
...
function getName() { // on button onclick
 FB.getLoginStatus(function(response){
  if (response.authResponse)
   {
    window.loggedIn = true;
    debugString('Logged in');
   } else
   {
    window.loggedIn=false; 
    debugString('Not logged in');
   }
}, true);
if (window.loggedIn === undefined)   {
     debugString('getLoginStatus did not exec'); // I always get this message
  }

}

ОБНОВЛЕНИЕ 2. Я создал новое приложение на другом URL-адресе, который настроен как автономный веб-сайт. Там эти коды работают отлично, я могу getLoginStatus, я могу войти в систему и т.д. Есть ли какая-то разница, работающая в контексте FB и на отдельном веб-сайте, используя FB JavaScript SDK?

4b9b3361

Ответ 1

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

Например, если вы зарегистрировали сайт с примером .com, а ваш промежуточный сервер - example.mystagingserver.com, обратный вызов не будет запускаться. В этом случае вам нужно создать второе приложение в Facebook и использовать идентификатор приложения и секрет для нового приложения.

Ответ 2

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

Наконец-то я узнал, что если ваше приложение представляет собой режим песочницы, ни один из разработчиков не может видеть ваше приложение в виде pagetab. Но вызов getLoginStatus будет терпеть неудачу (даже включение журнала).

Понадобилось время, чтобы понять, что один из них, я надеюсь, что это может спасти кого-то еще некоторое время.

Ответ 3

Я использую этот код успешно. Я не совсем уверен, где различия... но я использую загрузчик ASYNC FB.

 window.fbAsyncInit = function() {
   FB.init({ appId: 'XXXXXX', //change the appId to your appId
             status: true, 
             cookie: true,
             xfbml: true,
             oauth: true});

 function authEvent(response) {

   if (response.authResponse) {
          //user is already logged in and connected
           FB.api('/me', function(info) {
              login(response, info);
            });
    } else {
          //user is not connected to your app or logged out
           button.onclick = function() {
            FB.login(function(response) {
            if (response.authResponse) {
               FB.api('/me', function(info) {
                   login(response, info);
              });   
                } else {
               //user cancelled login or did not grant authorization
             }
         }, {scope:'email,rsvp_event,status_update,publish_stream,user_about_me'});     
                    }
                }
            }

            // run once with current status and whenever the status changes
            FB.getLoginStatus(updateButton);
            FB.Event.subscribe('auth.statusChange', updateButton);  
        };
        (function() {
            var e = document.createElement('script'); e.async = true;
            e.src = document.location.protocol 
                + '//connect.facebook.net/en_US/all.js';
            document.getElementById('fb-root').appendChild(e);
        }());


        function login(response, info){
            if (response.authResponse) {
                accessToken =   response.authResponse.accessToken;
        userid = info.id;


                userInfo.innerHTML  = '<img src="https://graph.facebook.com/' + info.id + '/picture">' + info.name+"<br /> Your Access Token: " + accessToken;
            }
        }

Ответ 4

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

FB.getLoginStatus(function(response) {
    if (response.authResponse) {
        // logged in and connected user, someone you know
    } else {
        // no user session available, someone you dont know
    }
});

Из Документация FB JS SDK.

Вы можете обернуть весь код в jQuery готов:

$('document').ready(function(){
    ... above code
})

Также вы можете проверить этот вопрос StackOverflow.

Ответ 5

У меня такая же проблема. Я работал над процессом входа на наш сайт в Facebook. Во время разработки "FB.getLoginStatus" не возвращал ответ. Я исправил это в настройках приложения на фейсбуке:

-In facebook перейти к "управлять приложениями"

-Go к настройкам "входа в Facebook" вашего приложения

-Add ваш URL разработки (например, " https://localhost ") к "действительным URI перенаправления OAuth"

(Не забудьте удалить " https://localhost " из URI перенаправления OAuth, когда закончите разработку.)

Ответ 6

Для меня после обширного тестирования можно подтвердить, что диалог для регистрации пользователя не будет отображаться, если вы не используете действительный Application ID

Их можно найти в

https://developers.facebook.com/apps/{{Application__Id}}/settings/

Просто убедитесь, что вы вызываете api с правильным идентификатором.