2011-01-19 179 views
0

我试图让一个类,使访问Adobe Facebook图形API更容易没有所有nitty坚韧的东西进去。这就是我如何去做:我有一个FbNewLib.as和Test.as以及主要的test.fla。无法启动Facebook.init

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

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

然而,当我在testApp在Facebook上测试它在我的testApp的Facebook.init()不起作用。 textbox_txt中的内容只是“read_stream,null,testString”

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

回答

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> 
0

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