0

我正在使用as3-fb-api,它爲Flash應用程序連接到js-api。它工作正常:登錄,獲取朋友配置文件圖片,註銷,重複。如何在臉書服務器上同步Flash臉書應用程序

但是,如果用戶打開指向facebook.com的第二個瀏覽器選項卡,並使用它來註銷Facebook,然後返回到我的應用程序,然後點擊調用Facebook.logout()的註銷按鈕,問題就開始了。

我的應用程序偵聽:

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,這將阿賈克斯FB服務器,以發現用戶已經出來,回報該應用處理的消息。

在我的Firebug調試器,我看到facebookjsbridge:註銷函數被調用,但它的回調,FBAS.handleUserLogout,是調用,並且沒有任何事件監聽器被稱爲無論是。

那麼什麼是適當的方式來同步我的應用程序與服務器?

回答

0

後嘗試各種技術好幾天了,這是我想出了但它是的hackish

的問題是:如果用戶是通過AS3-FB-API登錄到我的Facebook應用程序:Facebook的.login(...),然後轉到另一個瀏覽器選項卡,在那裏打開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來處理重載)。

此外,我已經添加了一個例程到我的LOGOUT按鈕來使用這個系統。最初,當用戶按下注銷按鈕,我只是打電話給Facebook.logout(...),但失敗如果用戶已經註銷... Facebook.logout(...)甚至不打電話該回調帶有錯誤消息,所以該應用程序無法發現失去同步的問題。

所以,現在當用戶按下LOGOUT按鈕時,應用程序首先調用Facebook.api(「/ me /」,...)。爲什麼?因爲即使用戶通過另一個瀏覽器選項卡註銷,api調用也會返回錯誤消息(或成功消息)。如果此api調用返回失敗消息/對象,那麼我將應用程序轉移到重新加載階段,否則我通常會繼續使用Facebook.logout(...)