Facebook AS3 API - getSession()总是返回NULL,login()不会创建弹出窗口?

时间:2011-09-14 00:30:10

标签: flash actionscript-3 facebook facebook-graph-api

编辑:修复了大部分问题(但不太清楚为什么)。检查帖子底部的注释。

我正在从头开始我的第一个AS3 Facebook项目,所以对任何愚蠢的错误道歉。

无论如何,我创建了一个简单的类,init()是Facebook类对象,如果当前没有getSession(),则会提示您登录。现在的问题是我永远无法获得除getSession()之外的任何内容,并且调用Facebook.login()根本不会做任何事情。

你会在代码中看到Facebook.login()是有条件的,基于是否可以getSession(),但我已经尝试了这个没有那个检查,我甚至没有得到回调。

有什么想法吗?

我按照http://www.permadi.com/blog/2011/02/using-facebook-graph-api-in-flash-as3-1-5/上的教程,以防万一我的代码中有一些明显错误(这是他的错)。

以下代码:

    public function init():void {           
        Facebook.init(_appID, checkLoginStatus, null, _accessToken, true);
    }

    // facebook methods -----------------------------------------------------  /

    private function checkLoginStatus(response:Object, error:Object):void {

        if (Facebook.getSession() && Facebook.getSession().accessToken){ configLoginData(); }
        else if(!error) { promptLogin(); }
    }

    private function promptLogin():void {
        $requireLogin.dispatch();
    }

    // login / logout -------------------------------------------------------  /

    public function login(e:* = null):void {

        Debug.log("Facebook PROMPT LOGIN " + Facebook.getSession(), Debug.GREEN);

        if(Facebook.getSession() && !Facebook.getSession().accessToken){
            Facebook.login(checkLoginStatus, {perms:"publish_stream"});
        } else {
            Facebook.logout(logoutComplete);
        }
    }

我也让它从我的服务器上运行,它正确连接到一个应用程序(根据需要)。你可以在这里看到它:http://themoleking.com/laboratory/facebook_as3/FacebookAPI.html

2 个答案:

答案 0 :(得分:0)

好的,所以我通过挖掘Facebook API代码来解决这个问题。

如果在调用Facebook.init()时输入oauth = true,它将自动使所有会话调用为NULL。

我还不太清楚API知道原因,但至少我取得了一些进展:)

答案 1 :(得分:0)

你必须处理所有工作的javascript部分。

在html页面的head部分,包含这些javascript文件

<script type=”text/javascript” src=”http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js”></script>

<script type=”text/javascript” src=”http://connect.facebook.net/en_US/all.js”></script>

接下来,您需要在同一页面的正文中包含一个id =“fb-root”的div。 然后弹出窗口将显示给您的用户登录。

如果你想让init处理函数触发, 你必须使用此代码嵌入flash电影

    <script type=”text/javascript”>
swfobject.embedSWF(“yourfile.swf”, “flashContent”, “1000″, “700″, “9.0″, null, null, null, {name: “flashContent”});

</script>

你的flash对象id必须与跨浏览器名称匹配

然后确保在as3的主时间轴中执行所有Facebook.init()和login() 或您的文档类。 除了root以外的其他地方做它们会让你做恶梦。 希望这个帮助