2012-02-28 3 views
3

Мое приложение использует Facebook аутентификации:Как обнаружить выход пользователя из Facebook после входа в мое приложение?

FB.init({ 

    appId: config.fbAppId, 
    status: true, 
    cookie: true, 
// xfbml: true, 
// channelURL : 'http://WWW.MYDOMAIN.COM/channel.html', // TODO 
    oauth : true 

}); 

// later... 

FB.login(function(response) 
{ 
    console.log(response); 
    console.log("authId: " + response.authResponse.userID); 
    gameSwf.setLoginFacebook(response.authResponse.accessToken); 
}, {scope:'email,publish_actions,read_friendlists'}); 

И при его использовании, люди могут размещать на их стене:

var obj = { 
     method: 'feed', 
     link: linkUrl, 
     picture: pictureUrl, 
     name: title, 
     caption: "", 
     description: message 
    }; 

    function callback(response) { 
     // console.log("Post on wall: " + response); 
    } 

    FB.ui(obj, callback); 

Это прекрасно работает, но есть одна маленькая hickup. Если люди:

  1. Войти в приложение.
  2. Выйти из Facebook.
  3. Попытка сделать сообщение стены из приложения.

Открывается диалоговое окно открытия стены. Консоль говорит: «Отказано от отображения документа, потому что отображение запрещено с помощью X-Frame-Options.».

Могу ли я вместо этого получить Facebook, чтобы показать приглашение для входа пользователю. Или я могу обнаружить ошибку и сообщить пользователю, что он больше не вошел в систему на Facebook?

ответ

4

Просто вспомнить getLoginStatus НО принуждать туда и обратно в Facebook. Посмотрите следующий код:

FB.getLoginStatus(function(response) { 
    // some code 
}, true); 

Посмотрите последний набор параметров для истинного, чтобы заставить туда и обратно.

С SDK документации JS:

Чтобы улучшить производительность вашего приложения, а не каждый вызов проверки статуса пользователя приведет к запросу серверов Facebook. Где возможно, ответ кэшируется. Первый раз в текущем сеансе браузера вызывается FB.getLoginStatus или SDK JS имеет статус: true, объект ответа будет кэшироваться SDK. Последующие вызовы FB.getLoginStatus вернет данные из этого кэшированного ответа.

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

Чтобы обойти эту проблему, вы звоните FB.getLoginStatus со вторым параметра установлено значение истинно, чтобы заставить туда и обратно на Facebook - эффективно обновив кэш объекта ответа. (http://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/)

2

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

FB.getLoginStatus(function(response) { 
    if (response.status === 'connected') { 
     // the user is logged in and has authenticated your 
     // app, and response.authResponse supplies 
     // the user's ID, a valid access token, a signed 
     // request, and the time the access token 
     // and signed request each expire 
     var uid = response.authResponse.userID; 
     var accessToken = response.authResponse.accessToken; 
    } else if (response.status === 'not_authorized') { 
     // the user is logged in to Facebook, 
     // but has not authenticated your app 
    } else { 
     // the user isn't logged in to Facebook. 
    } 
}); 

http://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/

Есть также события для входа и выхода из системы, которые вы можете смотреть и делать что-то с этими ответами.

FB.Event.subscribe('auth.login', function(response) { 
    // do something with response 
}); 

FB.Event.subscribe('auth.logout', function(response) { 
    // do something with response 
}); 

http://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/

+0

Это казалось многообещающим, но после выхода из системы 'getLoginStatus 'все еще возвращает соединение. Я также подписался на 'auth.logout' и' auth.statusChange', но ни один из них не срабатывает, когда я выхожу из системы или когда я пытаюсь сделать стенографию. –

+0

Странно, как не стреляют. До тех пор, пока методы FB.Event.subsrcibe содержатся в документе $ (document) .ready (function(), они должны срабатывать. $ (document) .ready (function() { FB.Event.subscribe ('auth .login ', function (response) { console.log (auth.login)) }) }) Конечно, я предполагаю, что они не содержатся в документе $ (document) .ready (функция(), но через тестирование они всегда срабатывают вместе с другими событиями. – iamchrisfryer