我在打电话 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()什么都不做?
答案 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:重新审视这件事......这次我错过了画布网址需要指向你的页面,如果不是,当然呼叫转到另一个页面,你永远不会收到回复。显而易见,但它又打击了我......