我正在开发一个由不同用户玩的应用程序,但我使用 as3 graph api 来验证用户身份并在他们的墙上发布,并且我需要在下一个用户开始 session 之前注销每个用户在 as3 图形 API 上: http://code.google.com/p/facebook-actionscript-api/
我搜索强制 FB 询问登录信息,但注销后再次登录时,API 会跳过该步骤并在最后一个用户 session 上登录。
最佳答案
我在网上看到的解决方案都不适合我。问题确实是 StageWebView facebook cookie 在注销时没有通过 FacebookMobile.logout() 调用清除。使用访问 token 加载 logout.php 对我没有帮助,可能是因为空中应用程序没有有意义的“下一个”参数值。我看到有人建议在那里使用 localhost 或 facebook.com,但这些选项都不起作用。
我提出了一个非常有问题的解决方案,但它目前有效。 重点是在 Facebook 中注销用户,就像他自己注销一样。为此,我们需要在 StageWebView 中加载 facebook.com 并单击注销。注销按钮是“logout_form”html 表单的提交表单项。所以我们需要进行 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 用于清除 Facebook lib 可能仍然拥有的任何本地 SharedObject 数据。
关于apache-flex - As3 Graph API 注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4828072/