2012-02-13 3 views
0

Я полный noob, используя API-интерфейс Facebook для AS3. У меня есть Flash-игра, и идея состоит в том, чтобы загрузить ее в Facebook, и все, кажется, в порядке (при входе в приложение Facebook swf отлично показывает, и я могу опубликовать идентификатор пользователя facebook, имя пользователя и оценку к базе данных на сервере, где находится игра. Я намерен, чтобы игра автоматически отправила пользователю фид, что он/она набрал, но после проведения большого количества тестов я узнал, что метод просто не работает.Метод Facebook.init не выполняется

Вот пример файла .as, который пытается опубликовать партитуру ленту новостей пользователя:

package 
{ 
    import flash.display.MovieClip; 
    import flash.events.Event; 
    import flash.display.Stage; 
    import flash.events.KeyboardEvent; 
    import flash.events.MouseEvent; 
    import flash.net.URLLoader; 
    import flash.net.URLRequest; 
    import flash.net.URLVariables; 
    import flash.net.URLLoaderDataFormat; 
    import flash.net.URLRequestMethod; 
    import com.facebook.graph.Facebook; 
    import com.adobe.serialization.json.JSON; 
    import flash.utils.setTimeout; 
    import flash.net.navigateToURL; 

    public class GameOver extends MovieClip 
    { 
     private var user_id : String = ""; 
     private var user_name : String = ""; 

     // these are the api and secret keys you should be used to 
     var api_key:String="MY_API_KEY"; 



     function GameOver() 
     { 
      var newscore = Main.scorenum; 
      finalScore.text = newscore; 
      getFacebookID(); 
      Facebook.init(api_key); 
      var opts:Object = {scope:"publish_stream, email"}; 
      Facebook.login(onLogin,opts); 

     }   

     function onLogin(session:Object, fail:Object):void 
     { 
      if(session!=null) 
      { 
       post();    
      } 
      else 
      { 
       trace("Login Failed"); 
      } 
     } 

     public function post():void 
     { 
      var params:Object = new Object; 
      //params.access_token = Facebook.getAuthResponse().accessToken; 
      params.message = 'Hello World'; 
      params.caption = "Hello World"; 
      params.description = "Hello World"; 
      params.picture="http://1.bp.blogspot.com/-0Hn3AjTJj6U/TZHe3ragXGI/AAAAAAAAA1M/_SBk3dx61EE/s1600/med_funny-cat.jpg"; 
      params.name="Hello World"; 
      params.link="http://1.bp.blogspot.com/-0Hn3AjTJj6U/TZHe3ragXGI/AAAAAAAAA1M/_SBk3dx61EE/s1600/med_funny-cat.jpg"; 
      var methodInput = 'feed';   
      Facebook.api("/"+user_id+"/feed",submitPostHandler,params,"POST"); 
     } 

     private function submitPostHandler(result:Object, fail:Object):void { 
      trace("\n\nRESULT:\n" + JSON.encode(result)); 
      puntajeFinal.text = "RESULT:" + JSON.encode(result) + user_name; 
     } 

А вот файл PHP, где отправил .swf:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml"> 
<head> 
<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> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title></title> 
</head> 
<body> 
<div id="fb-root"></div> 
<div id="chimpInvader"> 
      <p><a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p> 
</div> 
<div id="flashContent"> 
<!--<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="600" height="700"> 
    <param name="SRC" value="chimpInvader.swf" /> 
    <embed src="chimpInvader.swf" width="600" height="700" /> 
</object>--> 
</div> 
<script> 
FB.init({appId : '336824736350079', status : true, cookie : true, xfbml : true }); 
    FB.Canvas.setAutoResize(false); 
    FB.Canvas.setSize({ height: 720, width: 600 }); 
    swfobject.embedSWF("chimpInvader.swf", "chimpInvader", "600", "700", "11.1", null, null, null, null); 
</script> 

</body> 
</html> 

Желаю вам помочь, извините за мой паршивый английский.

ответ

0

Вы используете библиотеку javascript для Facebook, чтобы аутентифицировать пользователя с помощью facebook. Итак, чтобы заставить приложение работать со вспышкой, вам нужно, чтобы API javascript запрашивал дополнительные разрешения для публикации истории в фиде пользователя.

Когда вы запрашиваете расширенные разрешения и пользователь предоставляет их, api javascript вернет токен доступа. Это будет длинная строка. Передайте эту строку во флеш-память, так как флеше нужно будет включить этот токен доступа при публикации новостей в facebook.

Ниже приводится способ, которым я хотел бы добиться этого, когда я использую facebook и flash вместе.

<script src="js/swfobject.js"></script> 
<script> 
     // make it safe to use console.log always 
     (function(b){function c(){}for(var d="assert,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,timeStamp,profile,profileEnd,time,timeEnd,trace,warn".split(","),a;a=d.pop();){b[a]=b[a]||c}})((function(){try 
     {console.log();return window.console;}catch(err){return window.console={};}})()); 
     // Set up SWF Address 
     var flashvars = { 
     }; 
     var params = { 
      menu: "false", 
      scale: "noScale", 
      allowFullscreen: "true", 
      allowScriptAccess: "always", 
      bgcolor: "#000000", 
      wmode: "transparent" // can cause issues with FP settings & webcam 
     }; 
     var attributes = { 
      id:"YourEmbeddedSwf" 
     }; 
     swfobject.embedSWF(
      "YourEmbeddedSwf.swf", 
      "altContent", "520", "724", "10.0.0", 
      "expressInstall.swf", 
      flashvars, params, attributes); 
    </script> 
</head> 

<body> 
<div id="fb-root"></div> 
<script> 
// Load Facebook API 
    window.fbAsyncInit = function() { 
     FB.init({ appId: 'PLACE YOUR APP ID HERE', 
      channelUrl : '//yoursite.com/channel.html', 
      status: true, 
      cookie: true, 
      xfbml: true, 
      oauth: true}); 
    // Additional initialization code here 
    }; 
    // Load the SDK Asynchronously 
    (function(d){ 
    var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;} 
    js = d.createElement('script'); js.id = id; js.async = true; 
    js.src = "//connect.facebook.net/en_US/all.js"; 
    d.getElementsByTagName('head')[0].appendChild(js); 
    }(document)); 

    // Custom Facebook Calls. 
    // Call getAccessToken() from flash using External Interface, 
    function getAccessToken(){ 
     FB.login(function(response) { 
     if (response.authResponse) { 
     var access_token = FB.getAuthResponse()['accessToken']; 
     //Log your access token so you can be sure the javascript is worjking,. 
     console.log('Access Token = '+ access_token); 
      var swf = document.getElementById("YourEmbeddedSwf"); 
      // Call a flash function exposed with External Interface. 
      swf.setAccessToken(access_token); 
     }); 
     } else { 
     console.log('User cancelled login or did not fully authorize.'); 
     } 
    }, {scope: ''}); 
    } 
    // Get Swf 
    function getSwf(movieName) { 
     if (navigator.appName.indexOf("Microsoft") != -1) { 
      return window[movieName]; 
     } else { 
      return document[movieName]; 
     } 
    } 
    } 
</script> 
<!-- Embed the swf --> 
<div id="altContent"> 
    <h1>Alternate Content</h1> 
    <p><a href="http://www.adobe.com/go/getflashplayer">Get Adobe Flash player</a></p> 
</div></body> 
</html> 
0

Это как раз то, что вы должны установить свой домен и холст URL прямо в настройках вашего приложения. В противном случае вы не сможете увидеть какие-либо ошибки при запуске facebook.init(), и он не попадет в эту функцию.

Смежные вопросы