2011-01-19 182 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()運行時,您將無法看到任何錯誤,並且不會進入該函數。