0

私は、Adobe Facebook Graph Api に簡単にアクセスできるようにするクラスを作成しようとしています。メイン test.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 に答える