Ни одно из решений, которые я видел в Интернете, не работало для меня. Проблема действительно заключается в том, что cookie-файл Facebook StageWebView не очищается при выходе из системы с помощью вызова FacebookMobile.logout(). Загрузка logout.php с токеном доступа мне не помогла, вероятно, потому, что нет значения параметра «следующее» для воздушных приложений, что имеет смысл. Я видел, как люди предлагали использовать localhost или facebook.com, но ни один из этих вариантов не работал.
Я придумал действительно сомнительное решение, но пока оно работает. Смысл в том, чтобы выйти из системы пользователя в facebook, как если бы он вышел из системы самостоятельно. Для этого нам нужно загрузить facebook.com в StageWebView и нажать «Выйти». Кнопка выхода — это элемент формы отправки для html-формы «logout_form». Итак, нам нужно сделать вызов javaScript
document.getElementById('logout_form').submit();
в нашем StageWebView. И мы можем сделать это, позвонив
webView.loadURL("javascript:document.getElementById('logout_form').submit();");
в ActionScript.
Полный код, который я использую сейчас
protected var _logoutAttemptInProgress:Boolean = false;
public function fbLogout():void{
if(!_isLoggedIn) return;
if(_logoutAttemptInProgress) return;
_logoutAttemptInProgress = true;
var webView:StageWebView = new StageWebView();
webView.viewPort = new Rectangle(-1, 0, 1, 1);
webView.stage = this.stage;
webView.loadURL("http://www.facebook.com/lksmlrsgnlskn");
webView.addEventListener(Event.COMPLETE, runLogoutJs);
function runLogoutJs(event:Event):void{
webView.removeEventListener(Event.COMPLETE, runLogoutJs);
var jsString:String = "document.getElementById('logout_form').submit();";
webView.loadURL("javascript:"+jsString);
webView.addEventListener(Event.COMPLETE, closeWebView);
}
function closeWebView(event:Event):void{
webView.removeEventListener(Event.COMPLETE, closeWebView);
webView.stage = null;
webView.dispose();
_isLoggedIn = false;
_logoutAttemptInProgress = false;
}
FacebookDesktop.logout(null, APP_ORIGIN);
}
«lksmlrsgnlskn» — это просто какой-то случайный мусор для перехода к странице с ошибкой, которая намного меньше главной страницы и загружается быстрее.
FacebookDesktop.logout предназначен для очистки любых локальных данных SharedObject, которые все еще могут быть в библиотеке Facebook.
person
borisgolovnev
schedule
26.05.2012