As3 Graph API Logout

时间:2011-01-28 12:13:20

标签: flex facebook air logout

我开发的应用程序将由不同的用户播放,但我使用as3 graph api来验证用户并在他们的墙上发布,我需要在下一个用户在as3 graph api上开始他的会话之前注销每个用户: http://code.google.com/p/facebook-actionscript-api/

我搜索强制FB要求登录信息,但在再次登录时退出后,API跳过步骤并在最后一个用户会话中记录。

3 个答案:

答案 0 :(得分:2)

我在网上看到的解决方案都没有对我有用。问题确实是在使用FacebookMobile.logout()调用注销时没有清除StageWebView facebook cookie。使用访问令牌加载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数据。

答案 1 :(得分:1)

这是一个由FacebookMobile,Facebook和FacebookDesktop不断修订的问题。基本上,您需要确保设置FacebookDesktop.manageSession = false;并传递第二个参数“注销”你的网站的api url。 If that doesn't work, the other method is to use "reallyLogout", as detailed here in this thread

评论#24中的注释详细说明了从FacebooMobile(或您正在使用的任何单身)暴露访问令牌的方式,然后使用访问令牌在Facebook上手动调用logout.php方法。

http://code.google.com/p/facebook-actionscript-api/issues/detail?id=297#c24

答案 2 :(得分:0)

这是cookie的问题,我的意思是,当用户在第一个用户中登录API日志时,第一个用户会话仍然存在。

我不知道为什么,但Facebook Api注销方法不会将用户从Facebook中注销,只会将用户从您的应用程序中注销。

如果您找到了解决方案或想到别的东西,请告诉我们,以便我们能够获得解决方案。