0

我正在尝试创建一个类,使访问 Adob​​e Facebook Graph Api 变得更容易,而无需进入所有细节。这就是我的做法:我有一个 FbNewLib.as 和一个 Test.as 以及主要测试.fla。

在 FbNewLib.as 中,我有初始化 Facebook api 的 init 行。

package
{
import com.facebook.graph.Facebook;
import com.facebook.graph.data.FacebookSession;

import flash.external.ExternalInterface;

public class FbNewLib 
{
    protected static const app_id:String = "155006914551234" //replace with App Id;
    public var scope:String;
    public var userId:String;
    public var testString:String;

    var session:FacebookSession;

    public function FbNewLib() 
    {
        trace("FbNewLib initiated.")
    }

    public function initFacebookLib(scopeString:String):void
    {
        scope = scopeString;
        testString = "testString";

        Facebook.init(app_id, onInit);
    }

    protected function onInit(result:Object, fail:Object):void 
    {
        trace("onInit");
        testString = "testStringONINIT";

        if (result) 
        { //already logged in because of existing session
            trace ("On init, already logged in.");

            testString = "testStringSUCCESSFUL";

            session = Facebook.getSession();
            userId = session.uid;
        } 
        else 
        {
            trace("On init, not logged in.");

            testString = "testStringUNSUCCESSFUL";
        }
    }

在我的 Test.as 中:

    public function Test()
    {
        trace("connected to test.fla");

        init_btn.addEventListener(MouseEvent.CLICK, initFbLib);
    }

    private function initFbLib(e:MouseEvent):void
    {
        gotoAndStop(2);

        var fb:FbNewLib = new FbNewLib();
        fb.initFacebookLib("read_stream");

        textBox_txt.text = fb.scope + " " + fb.userId + " " + fb.testString;
    }

但是,当我在 Facebook 的 testApp 中的 testApp 中对其进行测试时,Facebook.init() 不起作用。textbox_txt 中的内容只是“read_stream, null, testString”

任何人都可以帮忙吗?这甚至可能吗?谢谢!

4

2 回答 2

0

只是您必须在应用程序设置中正确设置域和画布 URL。否则,当 facebook.init() 运行时,您将看不到任何错误,并且不会进入该函数。

于 2012-09-10T09:02:36.487 回答
0

这是一种使用 Graph API 连接到 Facebook 的方法。一切都在评论中解释。这实际上是连接到 facebook,没有发布到墙上或任何东西。这部分可以在这个类下面找到。

package com.DAL 
{
    import com.facebook.graph.Facebook;
    import flash.events.Event;
    import com.facebook.graph.data.FacebookSession;
    import flash.events.EventDispatcher;
    import flash.events.MouseEvent;
    import com.fbLoginButton;
    import com.adobe.serialization.json.JSON;

    public class FBConnect extends EventDispatcher
    {
        /******************************************
        *   Variables
        ******************************************/
        private var _applicationID:String;
        private var _extendedPermissions:Object;

        /******************************************
        *   Constants
        ******************************************/
        public static const CONNECTED:String = "CONNECTED";

        /******************************************
        *   Properties
        ******************************************/             
        public function get applicationID():String
        {
            return _applicationID;
        }

        /******************************************
        *   Constructor
        ******************************************/
        public function FBConnect() 
        {
            super();

            //Set applicationid
            _applicationID = "YOUR_ID";

            //Set permissions to ask for
            _extendedPermissions = {perms:"read_stream, publish_stream, user_about_me, read_friendlists, user_photos"};

            //Initialize facebook
            Facebook.init(_applicationID);
        }

        /******************************************
        *   Methods
        ******************************************/     
        public function login(e:MouseEvent):void
        {           
            Facebook.login(handleLogin, _extendedPermissions);
        }

        private function handleLogin(response:Object, fail:Object):void
        {
            dispatchEvent(new Event(CONNECTED));
        }
    }
}

那应该注意连接到facebook。如果你想张贴到墙上或任何东西上,你可以在下面找到一个小例子。

        /******************************************
        *   Constructor
        ******************************************/
        public function FBLogic() 
        {
            super();

            _connect = new FBConnect();
            _connect.addEventListener(FBConnect.CONNECTED, startLoaders);

            initLoaders();
        }

        /******************************************
        *   Methods
        ******************************************/

        ...

        public function post(message:String):void
        {
            var _params:Object = new Object();

            _params.access_token = Facebook.getSession().accessToken;
            _params.message = message;

            Facebook.api("/" + _userID + "/feed", messagePosted, _params, "POST");
        }

        public function messagePosted(response:Object, fail:Object):void
        {
            dispatchEvent(new Event(MESSAGEPOSTED));
        }

        public function login(e:MouseEvent):void
        {
            var _loginButton:fbLoginButton = e.target as fbLoginButton;
            _loginButton.alpha = 0;
            _loginButton.visible = false;

            _connect.login(e);
        }

如果这不能解决问题,您可能忘记在 html 文件中添加一些代码。请务必将以下代码添加到 html 文件的头部:

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

你还需要一个名为 fb-root 的 div,声明如下。

<body>
    <div id="fb-root"></div>
    <div id="flashContent">
    </div>
</body>
于 2011-08-25T08:12:19.367 回答