Aucune des solutions que je l'ai vu sur le web a travaillé pour moi. Le problème est en effet avec cookie facebook StageWebView n'étant pas autorisé à la déconnexion avec FacebookMobile.logout() appel. Le chargement de logout.php avec le jeton d'accès ne m'a pas aidé probablement parce qu'il n'y a pas de valeur de paramètre "next" pour les applications aériennes qui a du sens. J'ai vu des gens suggérer d'utiliser localhost ou facebook.com mais aucune de ces options n'a fonctionné.
J'ai trouvé une solution vraiment discutable, mais cela fonctionne pour l'instant. Le but est de se déconnecter de l'utilisateur sur Facebook normalement, comme s'il se déconnectait lui-même. Pour ce faire, nous devons charger facebook.com dans StageWebView et cliquer sur la déconnexion. Le bouton Déconnexion est un élément de formulaire de soumission pour le formulaire html "logout_form". Nous avons donc besoin de faire un appel javaScript
document.getElementById('logout_form').submit();
dans notre StageWebView. Et nous pouvons faire exactement cela en appelant
en ActionScript.
Le code complet que je l'utilise pour l'instant
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 » est juste des ordures au hasard pour se rendre à la page d'erreur qui est beaucoup plus petite que la page principale et des charges plus rapides.
FacebookDesktop.logout permet de supprimer les données SharedObject locales que la bibliothèque Facebook peut encore posséder.
Cette astuce fonctionne. Période. Merci d'avoir partagé. – benya