Ни одно из решений, которые я видел в Интернете, не сработало для меня.Проблема действительно в том, что cookie-файл 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, которые могут быть в библиотеке lib Facebook.