2011-11-19 69 views
3

我正在使用Flash Builder 4.5,AIR 2.6,Facebook action script 3 API the latest version製作適用於Android的移動AIR應用程序。Facebook動作腳本3 API登錄/註銷問題

我遇到登錄/註銷問題。我只能登錄一次 - 然後我的數據緩存以某種方式自動登錄。當我呼叫註銷時,我收到了響應TRUE,但我並沒有真正從系統註銷。標準登錄對話框不會顯示給我。我已經閱讀了很多關於stackoverflow和官方網站上公開問題的文章,但沒有一篇是有幫助的。我該如何解決這個問題?以下是我使用的代碼:

package 
{ 
    import flash.display.DisplayObject; 
    import flash.display.Sprite; 
    import flash.display.Stage; 
    import flash.display.StageAlign; 
    import flash.display.StageScaleMode; 
    import flash.events.Event; 
    import flash.events.IOErrorEvent; 
    import flash.external.ExternalInterface; 
    import flash.net.URLLoader; 
    import flash.net.URLRequest; 
    import flash.system.Capabilities; 
    import flash.system.Security; 
    import flash.display.Loader; 
    import com.facebook.graph.FacebookMobile; 

     public class TestProj extends Sprite 
     { 
      public function TestProj() 
      { 
       super(); 

       //register to add to stage 
       this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); 

       // support autoOrients 
       stage.align = StageAlign.TOP_LEFT; 
       stage.scaleMode = StageScaleMode.NO_SCALE; 
      } 

      private function onAddedToStage(event:Event):void 
      { 
       this.removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage); 

       FacebookMobile.init("195053007196177", initCallback); 
      } 

      private function initCallback(success:Object, fail:Object):void 
      { 
       var appPermissions:Array = new Array("read_stream", "offline_access", "publish_stream", "read_friendlists"); 
       FacebookMobile.login(loginCallback, this.stage, appPermissions); 
       //FacebookMobile.logout(logoutCallback); 
      } 

      private function loginCallback(success:Object, fail:Object):void 
      {  
//And here I always receive success with my UserID 
//and login dialog don't appears to me before this 
       if (success) 
       { 
        trace("login ok"); 
       } 
       else 
        trace("login failed"); 
      } 

      private function logoutCallback(success:Object):void 
      { 
//here I reseive "TRUE" always!! 
       trace(success); 
      } 

     } 
    } 

回答

6

您只將logoutCallback的第一個參數傳遞給您的註銷方法。如果您爲您的應用程序添加了爲您的網站url指定的第二個參數,則應該將其清除出該窗口的html cookie。另外,設置FacebookMobile.manageSession = false;

  FacebookMobile.logout(logoutCallback, "http://your_app_origin_url"); 

有一個潛在的相關錯誤,涉及到桌面和移動設備不以同樣的方式訪問或清除訪問令牌。爲此,有一種黑客描述了在FacebookMobile中公開訪問令牌,然後用訪問令牌手動調用「註銷」方法。這裏描述的問題包括一個名爲「reallyLogout」的方法。 If what I've written above doesn't work, implement "reallyLogout".

當您註銷時,您的應用將清除本地會話,但不會將您註銷到系統外。這在the documentation for logout.中明確定義如果您在智能手機,網絡瀏覽器和現在的這個移動桌面應用上登錄Facebook,並且突然註銷,它不應該將您註銷到任何地方在那個瀏覽器會話中。所以傳遞第二個參數。

+0

感謝名單,但我通過了第二個參數,但它仍然不工作(( – yozhik

+0

FacebookMobile.logout(logoutCallback,「HTTP://米facebook.com「); – yozhik

+0

這不是你的應用程序url我的朋友。這是m.facebook.com。放入你的應用程序的URL。此外,看看實現reallyLogout(),我可以通過你說。 –

0

看看這個問題的解決方案。莫比有人可以幫助:

var stage_ref:Stage = PlatformUtil.originalStage(); //my custom class to get stage 
var webView:StageWebView = new StageWebView(); 
webView.viewPort = new Rectangle(0, 0, stage_ref.width, stage_ref.height); 
FacebookMobile.login(loginCallback, stage_ref, appPermissions, webView); 

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

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

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

1

我有這個確切的問題,並試圖修復無數之後,這次終於似乎工作:

默認的註銷功能似乎沒有通過FacebookMobile actionscrip正確清除cookie t API。在comment #33 here解決方案爲我工作,在這裏轉載。請務必在您自己的APP_ID中下載:

function logout(e:MouseEvent):void { 
    FacebookMobile.logout(onLogout, "https://m.facebook.com/dialog/permissions.request?app_id=APP_ID&display=touch&next=http%3A%2F%2Fwww.facebook.com%2Fconnect%2Flogin_success.html&type=user_agent&perms=publish_stream&fbconnect=1"); 
} 

function onLogout(result:Object):void 
{ 
    trace("Perfect Log Out!") 
} 
1

整天都有這個Android Facebook清理註銷問題,設法解決它。希望能幫助到你。這是我的FB手機handlelogin代碼,以確保所有fb cookie和會話都被刪除,用戶需要重新登錄。
有時FB服務器很慢。它最好放在一個計時器調用handleLoginClick(前)再次

function handleLoginClick():void 
    { 
     trace("connecting to facebook"); 
     if (FacebookMobile.getSession() == null) 
     { 
      FacebookMobile.init(APP_ID, onHandleInit, null); 
      FacebookMobile.manageSession = false 
     } 
     else 
     { 
      var webView:StageWebView = new StageWebView(); 
      webView.viewPort = new Rectangle(0, 0, 1, 1);   
      webView.stage = this.stage;   
      webView.loadURL("https://m.facebook.com/logout.php?confirm=1&next=http://www.facebook.com&access_token=" + FacebookMobile.getSession().accessToken); 
      webView.addEventListener(Event.COMPLETE,webviewhandleLoad); 
      function webviewhandleLoad(e:Event) 
      { 
       FacebookMobile.logout(null, "http://apps.facebook.com/<appName>/"); 
       FacebookMobile.logout(null, "http://www.facebook.com"); 
       webView.dispose() 
       webView = null 
       setTimeout(handleLoginClick,3000) 

      } 
     } 
    }