为什么Facebook Actionscript API init()不起作用?

时间:2010-12-09 22:06:49

标签: flex facebook actionscript facebook-graph-api facebook-actionscript-api

我在打电话     com.facebook.graph.Facebook.init(APP_ID,loginHandler);

使用actionscript api登录facebook(如本教程中所述:http://www.adobe.com/devnet/facebook/articles/flex_fbgraph_pt4.html)。但是,它似乎没有做任何事情。

查看API源代码,对JS的唯一调用是     ExternalInterface.call('FBAS.init',JSON.encode(options));

所需的两个javascript库是:

http://connect.facebook.net/en_US/all.js
FBJSBridge.js

但是,我在这些库中找不到任何对FBAS的引用。我甚至使用正确的库吗?我错过了为什么FBAS不存在的另一个原因吗?甚至为什么调用Facebook.init()什么都不做?

6 个答案:

答案 0 :(得分:4)

FBJSBridge.js已嵌入SDK中。看看com.facebook.graph.core.FacebookJSBridge.as,你会看到FBJSBridge.js的整个javascript块被添加到com.facebook.graph.Facebook.as的构造函数中的ExternalInterface上。 / p>

我整天都在苦苦挣扎。我一直在观看由Facebook.init()产生的http GET,它看起来只是等到它超时,此时会产生另一个GET。它永远不会恢复正常。我尝试了APPID,那里的APIKEY和各种参数组合,但我从来没有看到它回来。我必须得出结论,它是如何工作的。如果没有,那就是它的工作方式。 : - /

无论如何,你会在FacebookJSBridge.as中的JS块中看到FBAS内部,init会订阅触发Facebook.handleSessionChange()的“auth.sessionChange”事件。您可以看到调用回调的位置。诀窍在于,sessionChanges会随时调用。因此,即使下次该事件触发不是因为FB.init()的响应,您的回调仍将在此时被调用。

如果您在调用Facebook.init()之前为“auth.sessionChange”设置了自己的处理程序,并将“cookie”设置为true,那么在创建cookie之后,您将获得一个在您之后触发的sessionChange事件调用init。虽然因为GET永远不会得到响应,但仍然没有调用Init的回调。

Facebook.addJSEventListener("auth.sessionChange", onSessionChange);
Facebook.init(_appID, onInitFacebookConnect, 
      {cookie: true, 
       appId: _appID, 
       perms: "user_birthday,read_stream,publish_stream"});

您可以在该教程中找到的示例可以使用,但实际上将应用程序放在一起时并不是您想要使用的示例。否则,您总是要单击按钮来触发fbconnect。看起来oauth2将成为获得所需行为的方式,每次“连接”时都不需要点击按钮。您可以从oauth2获取sessionkey,然后使用Flash / Facebook GRAPHSDK或JS,具体取决于您尝试做的最方便。

这可能会有所帮助: http://blog.yoz.sk/2010/05/facebook-graph-api-and-oauth-2-and-flash/

答案 1 :(得分:2)

似乎有多种原因导致失败。请参阅以下链接:

http://code.google.com/p/facebook-actionscript-api/issues/detail?id=165

http://www.pastrytech.com/willy/FacebookActionScript3SDKExample.html

对我而言,Adobe教程提供的包装文件中脚本标记的顺序是错误的。

确保在swfobject之前添加了Facebook JS库。即确保您的脚本标记按此顺序排列:

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

答案 2 :(得分:0)

似乎FBAS.getSwf()在调用document.getElementById时使用了swf的名称

因此,如果你指定一个id而不是一个名字,那么FacebookJSBridge.as的javascript会查找id为null的元素。

或者,如果你指定一个名字而不是一个id,那么FacebookJSBridge.as的javascript会查找相应的字符串,但是存在一个没有这种id的元素。

如果您指定名称和相同的ID,那么它实际上可以找到swf。


var appId = "1234567890";

var swfNameAndId = "app_" + appId;

swfobject.embedSWF("/swfs/TestApp.swf", "app_placeholder", 760, 450, "9.0.0", false, { "appId": appId }, { "allowscriptaccess": "always" }, { "name": swfNameAndId, "id": swfNameAndId });

答案 3 :(得分:0)

替换

embedSWF("MyApp.swf", "flashContent", "640", "480", "9.0", null, null, null, {name:"flashContent"});    

swfobject.embedSWF("MyApp.swf", "flashContent", "640", "480", "9.0", null, null, null, {name:"flashContent"});  

即。 swfobject。 embedSwf

像魅力一样工作!

答案 4 :(得分:0)

答案 5 :(得分:0)

在我的情况下,index.template.html是不起作用的。我需要: 1)对FB JS SDK的引用 2)使用fb-root div作为body标签内的第一个条目

解决了我的问题。

编辑:我很困惑,Facebook.init()仅在用户登录时有效。对于身份验证,我调用Facebook.login

Edit2:重新审视这件事......这次我错过了画布网址需要指向你的页面,如果不是,当然呼叫转到另一个页面,你永远不会收到回复。显而易见,但它又打击了我......