Получить статус пользователя на Facebook в режиме реального времени - PullRequest
1 голос
/ 12 августа 2011

Этот вопрос связан с другим моим вопросом: Как узнать, не вышел ли пользователь из Facebook, FB.Event.Subscribe

В этом вопросе я пыталсяполучить обратный звонок, когда пользователи выходят из Facebook.Но поскольку у него пока нет подходящего ответа, я должен попробовать другой путь.Я пытаюсь опросить, чтобы получить статус входа пользователя с помощью javascript, например:

        function checkLogin()
        {
            alert("in");
            FB.getLoginStatus(function(response) {
              if (response.status == "connected") {
                // logged in and connected user, someone you know
                alert("ok - 5 seconds has passed");
              } else {
                // no user session available, someone you dont know
                alert("not ok");
              }
            });
            t=checkLogin("timedCount()",5000);
        }

Проблема заключается в следующем: функция возвращает правильный результат только при первом вызове .После этого кажется, что результат кэшируется, и я постоянно получаю сообщение «подключен» в ответ, хотя пользователь молча вышел из системы с помощью другой вкладки в браузере.

Это не хорошо, потому чтов это время в Facebook появляется диалоговое окно, в котором пользователю предлагается войти в систему.Но если пользователь отменит его, он все еще может работать с моим приложением (потому что его сеанс с моим сервером приложений еще не истек!).

В документе FB dev говорит, что:

Когда вы вызываете FB.getLoginStatus, может быть сделан HTTP-запрос к www.facebook.com для проверки текущего статуса пользователя.Однако, если FB.getLoginStatus уже был вызван во время этого сеанса браузера, и сеанс был сохранен в файле cookie, HTTP-запрос к facebook.com может не понадобиться

Так что я думаю, что этот эффектвызвано кешированием.Интересно, почему Facebook так делает.

Кто-нибудь знает, как обойти эту проблему?

Спасибо за любую помощь,

Хоанг Лонг

1 Ответ

1 голос
/ 19 октября 2011

В конце концов, мне потребовалось достаточно много времени, пока один из моих коллег не решил проблему.

Решение состоит в том, что нам нужно снова вызвать FB.init(), с cookie:false перед вызовом getLoginStatus.Это удалит куки и получит новую информацию.

FB.init({ 
        appId:'${appId}', 
            cookie: false, 
        status: true, 
        xfbml: true 
    });

FB.getLoginStatus(function (response) {
        if (response.session) {
                alert("here");
        }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...