4

我打电话给 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() 什么都不做?

4

6 回答 6

4

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

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

无论如何,您会在 FacebookJSBridge 的那个 JS 块中看到 FBAS 内部。因为该 init 订阅了触发 Facebook.handleSessionChange() 的“auth.sessionChange”事件。你可以看到这是你的回调被调用的地方。诀窍是在 sessionChanges 的任何时候都会调用它。因此,即使下一次该事件触发不是因为来自 FB.init() 的响应,您的回调仍然会在那时被调用。

如果您在调用 Facebook.init() 之前为“auth.sessionChange”设置了自己的处理程序,并且将“cookie”设置为 true,那么在创建 cookie 后,您将在调用 init 后立即触发 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-graph-api-and-oauth-2-and-flash/

于 2011-01-14T04:29:05.663 回答
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>
于 2011-02-16T23:10:53.583 回答
0

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

因此,如果您指定了一个 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 });
于 2011-02-25T19:27:23.880 回答
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

像魅力一样工作!

于 2011-03-01T07:31:12.977 回答
0

这是您的问题的答案。 http://novacoders.blogspot.com/2011/04/facebook-graph-api-init-problems.html

于 2011-04-07T14:23:48.667 回答
0

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

这解决了我的问题。

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

Edit2:重新审视了这件事......这次我错过了画布 url 需要指向您的页面,如果不是,当然呼叫会转到另一个页面,而您永远不会收到响应。很明显,但它再次击中了我......

于 2012-01-30T18:06:05.743 回答