Facebook操作脚本3 API登录/注销问题

Facebook操作脚本3 API登录/注销问题,facebook,actionscript-3,facebook-graph-api,air,Facebook,Actionscript 3,Facebook Graph Api,Air,我正在使用FlashBuilder4.5、AIR2.6为Android制作移动AIR应用程序 我在登录/注销时遇到问题。我只能登录一次——然后我的数据会以某种方式缓存,Facebook会自动让我登录。当我调用logout时,我收到的响应为TRUE,但我并没有真正从系统中注销。标准登录对话框没有为我显示。我已经在官方网站上读了很多关于stackoverflow和open issues的文章,但没有一篇是有用的。我怎样才能解决这个问题?以下是我使用的代码: package { import

我正在使用FlashBuilder4.5、AIR2.6为Android制作移动AIR应用程序

我在登录/注销时遇到问题。我只能登录一次——然后我的数据会以某种方式缓存,Facebook会自动让我登录。当我调用logout时,我收到的响应为TRUE,但我并没有真正从系统中注销。标准登录对话框没有为我显示。我已经在官方网站上读了很多关于stackoverflow和open issues的文章,但没有一篇是有用的。我怎样才能解决这个问题?以下是我使用的代码:

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);
            }

        }
    }

您只将logoutCallback的第一个参数传递给您的logout方法。如果您添加了为应用程序指定的站点url的第二个参数,则应将其从该窗口的html cookie中清除。另外,设置FacebookMobile.manageSession=false

            FacebookMobile.logout(logoutCallback, "http://your_app_origin_url");
存在一个潜在的相关bug,涉及桌面和移动设备不能以相同的方式访问或清除访问令牌。为此,有一个黑客描述了在FacebookMobile中公开访问令牌,然后使用访问令牌手动调用“注销”方法。这里描述了这个问题,包括一个名为“reallyLogout”的方法


当您注销时,您的应用程序将清除本地会话,但不会将您注销系统。如果您使用智能手机、网络浏览器和现在的移动桌面应用程序登录Facebook,然后突然注销,这一点在“想想看”中有明确定义。。。它不应该让你在任何地方注销,只是在浏览器会话中。所以传递第二个参数。

看看这个问题的解决方案。也许有人认为它有帮助:

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);


我遇到了这个问题,在尝试了许多修复之后,这似乎终于奏效了:

默认注销功能似乎无法通过FacebookMobile actionscript API正确清除Cookie。中的解决方案对我有效,在这里复制。确保在您自己的应用程序中使用sub\u 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!")
}

一整天都有这个Android Facebook干净的注销问题,设法解决它。希望能有帮助。这是我的FB mobile handlelogin代码,以确保删除所有FB cookie和会话,用户需要重新登录。
有时FB服务器非常慢。最好在再次调用handleLoginClick()之前设置一个计时器

函数handleLoginClick():void
{
跟踪(“连接到facebook”);
if(FacebookMobile.getSession()==null)
{
FacebookMobile.init(APP_ID,onHandleInit,null);
FacebookMobile.manageSession=false
}
其他的
{
var webView:StageWebView=newstageWebView();
webView.viewPort=新矩形(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(事件.完成,webviewhandleLoad);
函数webviewhandleLoad(e:事件)
{
FacebookMobile.logout(空,“http://apps.facebook.com//");
FacebookMobile.logout(空,“http://www.facebook.com");
dispose()文件
webView=null
设置超时(handleLoginClick,3000)
}
}
}

Thanx,但我传递了第二个参数,但它仍然不起作用((这不是你的应用程序url,我的朋友。这是m.facebook.com。放在你的应用程序url中。另外,研究一下实现reallyLogout(),我可以告诉你。我发现了什么问题,如果你对我的帖子感兴趣的话。Thanx寻求你的帮助!
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)

            }
        }
    }