为什么Facebook的API的ActionScript的init()不工作?
题
我打电话 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(选项));
所需要的两个JavaScript库是:
http://connect.facebook.net/en_US/all.js
FBJSBridge.js
然而,我不能找到在这些文库来FBAS任何参考文献。上午我甚至使用了正确的库?有我错过了,为什么FBAS犯规存在其他原因?甚至为什么叫Facebook.init()什么也不做?
解决方案
FBJSBridge.js已嵌入的SDK。看com.facebook.graph.core.FacebookJSBridge.as,你会看到的JavaScript的整个块是FBJSBridge.js就是附加到在com.facebook.graph.Facebook.as的构造ExternalInterface的。
我一直在这个整天挣扎。我一直在看的HTTP GET通过Facebook.init(生成),它看起来像它只是等待,直到超时,这时另一GET被催生。它永远不会回来正常。我试过APPID,在那里APIKEY和所有种类的参数组合,但我从来没有看到它回来。我不得不得出结论,是它的意思是如何工作。如果没有,那么这是怎么做的工作。 : - /
总之,你会内部FBAS看到在JS块在初始化订阅该“auth.sessionChange”事件触发Facebook.handleSessionChange()FacebookJSBridge.as。你可以看到,是你的回调被调用。诀窍是,这就是被称为随时随地的sessionChanges。所以,即使下一次事件触发是因为从FB.init(),您的回调仍然会得到在该点称为响应的不是。
如果您设置自己的处理程序“auth.sessionChange”你所拨打Facebook.init()之前,你设置的“cookie”为true,那么后一个cookie被创建,你会得到一个sessionChange事件后,你的权利射击调用初始化。初始化的回调仍然不会被调用,虽然因为GET从来没有得到响应。
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的图表-API和 - 的OAuth -2-和闪光/
其他提示
有似乎可以解释为什么这个失败多种原因。看到这些链接:
http://code.google.com/ p / Facebook的动作的API /问题/细节?ID = 165
http://www.pastrytech.com/willy/FacebookActionScript3SDKExample.html
对我来说是脚本标签的顺序是错误的包装文件土坯教程提供。
确保Facebook的JS库之前SWFObject的加入。即确保你的脚本标签顺序如下:
<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>
替换
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
工作就像一个魅力!
在我的情况下,它是没有工作的index.template.html。我需要: 1)到FB JS SDK结果,基准 2)使用FB-根DIV作为身体标记中的第一个条目
这解决了我的问题。
编辑:我感到困惑的是Facebook.init()只能当用户登录对于身份验证我请Facebook.login
EDIT2:重新认识这件事情。这一次我错过了,如果不是当然的呼叫转到另一个页面,你从来没有收到回应画布URL需要重新指向到您的网页。很明显,但是它打我......
似乎FBAS.getSwf()
使用的名称的在其呼吁document.getElementById
的SWF。
所以,如果你指定一个ID,但不是一个名字,然后FacebookJSBridge.as的JavaScript查找与空的id的元素。
或者,如果你指定一个名称,但不是一个ID,然后FacebookJSBridge.as的JavaScript会寻找适当的字符串,但没有这样的标识的元素存在。
如果你指定一个名字和相同的ID,那么它实际上可以找到瑞士法郎。
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 });