如何将flash facebook应用程序与facebook服务器同步
我正在使用as3 fb api,它连接到一个flash应用程序的js api。它工作正常:登录,获取好友档案图片,注销,重复 但是如果用户打开指向facebook.com的第二个浏览器选项卡,并使用它注销facebook,然后返回到我的应用程序,点击注销按钮调用facebook.logout(),问题就开始了 我的应用程序侦听:如何将flash facebook应用程序与facebook服务器同步,flash,facebook-graph-api,facebook-javascript-sdk,facebook-as3-api,Flash,Facebook Graph Api,Facebook Javascript Sdk,Facebook As3 Api,我正在使用as3 fb api,它连接到一个flash应用程序的js api。它工作正常:登录,获取好友档案图片,注销,重复 但是如果用户打开指向facebook.com的第二个浏览器选项卡,并使用它注销facebook,然后返回到我的应用程序,点击注销按钮调用facebook.logout(),问题就开始了 我的应用程序侦听: Facebook.addJSEventListener( 'auth.statusChange' , om__statusChange ) ;
Facebook.addJSEventListener( 'auth.statusChange' , om__statusChange ) ;
Facebook.addJSEventListener( 'auth.authResponseChange' , om__authResponseChange ) ;
Facebook.addJSEventListener( 'auth.login' , om__login_noticed ) ;
Facebook.addJSEventListener( 'auth.logout' , om__logout_noticed ) ;
理想情况下,我希望Facebook.logout()会调用js,它将ajax发送给fb服务器,以发现用户已经退出,并返回消息供应用程序处理
在我的firebug调试器中,我看到调用了facebookjsbridge:logout函数,但其回调函数FBAS.handleUserLogout未被调用,也未调用任何EventListener
那么,将我的应用程序与服务器同步的适当方式是什么 在尝试了几天各种技术之后,我想到了这一点,但它是黑客的 问题是:如果用户通过as3 fb api:facebook.login(…)登录到我的facebook应用程序,然后转到另一个浏览器选项卡,在那里打开facebook.com,在那里注销,然后返回到我的应用程序并处理它,我的应用程序将与facebook不同步 因此,为了解决这个问题,我现在有任何和所有Facebook.api调用来查找此故障:
{ error , [object Object] , object
{ code , 190 , number
message , Error validating access token: The session is invalid because the user logged out. , string
type , OAuthException , string
error_subcode , 467 , number
}
}
// I may discover later that there are other types of failures
// that I will need to catch as well.
如果有任何调用返回此错误,应用程序将重新加载自身(我使用对js的外部接口调用来处理重新加载)
此外,我还为我的注销按钮添加了一个例程来使用这个系统。最初,当用户按下注销按钮时,我会简单地调用Facebook.LOGOUT(…),但如果用户已经注销,则会失败。。。Facebook.logout(…)甚至不调用带有错误消息的回调,因此应用程序无法发现不同步问题
因此,现在当用户按下注销按钮时,应用程序首先调用Facebook.api(“/me/”,…)。为什么?因为该api调用将返回错误消息(或成功消息),即使用户已通过另一个浏览器选项卡注销。如果这个api调用返回一个失败消息/对象,那么我将把应用程序转移到重新加载阶段,否则我通常会继续使用Facebook.logout(…)