【问题标题】:facebook-actionscript-api notworking anymore?facebook-actionscript-api 不再工作了?
【发布时间】:2015-01-26 03:12:58
【问题描述】:

我开发了一个带有 adobe flash 和 air runtime 的 windows 桌面软件。它作为控制台在我们的本地计算机上运行。我使用 facebook-actionscript-api 让用户在他们自己的 facebook 墙上发布图像。它曾经运行良好。

直到不久前,我发现该功能不再起作用了, 当我调用 api 时,它会打开一个弹出窗口并显示如下错误代码:

{
   "error": {
     "message": "Invalid redirect_uri: Given URL is not allowed by the Application configuration.",
     "type": "OAuthException",
     "code": 191
   }
}

Facebook 似乎改变了一些东西,比如调用 URL。 但是,最新的 adi "GraphAPI_Desktop_1_8_1.swc" 似乎不起作用。

有什么解决办法吗?

我也在寻找在 Adob​​e Air 桌面中进行 javascript 调用的方法,以便我可以调用本机 facebook js api。到目前为止我还没有找到它。 (可能是因为我的编码技术不够好)

问候, 卫斯理

【问题讨论】:

  • 你解决了吗?我刚遇到同样的问题,所以任何想法都会有所帮助......

标签: javascript facebook actionscript-3 flash air


【解决方案1】:

A. 我遇到了同样的问题并且能够克服它。错误 191 表示您在尝试登录时使用了错误的回调 URI。问题来自 facebook-actionscript-api 库内部。如果您下载该库的源代码,您会发现它使用了一些预定义的回调 URI(请参阅 api/com/facebook/graph/core/FacebookURLDefaults.as 中的 LOGIN_SUCCESS_URL、LOGIN_SUCCESS_SECUREURL、LOGIN_FAIL_URL、LOGIN_FAIL_SECUREURL)。我认为这些是很久以前使用的旧的不推荐使用的 URL :)。目前,您必须为每个 Facebook 应用程序设置正确的回调 URI,并将该 URI 作为登录请求参数传递,您可以看到库在这种情况下为您传递了错误的 URL。所以我的第一步是在库中更改这些 URI(用正确的 URL 替换它们)。就我而言,我只是对它们进行了硬编码。我知道这不是一个最佳主意,最好添加以编程方式设置 URL 的可能性,但坦率地说,我根本没有时间。

之后您会发现登录对话框加载正常,但无法从回调 URL 参数中获取访问令牌。这里的原因其实是 Facebook 改变了 Callback URL 参数格式。旧版本是

http://your_callback.com?access_token=bla-bla-bla

并且新版本在 ? 之后添加了#看起来像:

http://your_callback.com?#access_token=bla-bla-bla. 

有一个“getURLVariables()”函数(参见 desktopAPI/com/facebook/graph/windows/AbstractWindow.as)用于从 URL 获取参数。所以我只是在该函数中添加了一个“if”条件(作为第一个!):

if (html.location.indexOf('?#') != -1) {
  params = html.location.slice(html.location.indexOf('?#')+2);
} else if ... (old code goes after my condition here)

这些更改足以使登录流程对我有用。我不知道这是否能解决您的所有问题(例如在墙上发布一些内容),但这可能是让它发挥作用的第一步。

注意:我根本不是 ActionScript 开发人员,可能我的方法是错误的,所以我会欣赏该解决方案的任何 cmets。

B. 至于你关于使用原生 JavaScript Facebook 库的第二个想法。我认为这个想法来自那篇文章 (http://www.adobe.com/devnet/games/articles/getting-started-with-facebooksdk-actionscript3.html)。问题是您必须使用 ExternalInterface 在 JavaScript 和 ActionScript 之间建立“桥接”。在我的情况下(桌面 AIR 应用程序)这是不可能的,因为在这种情况下不支持 ExternalInterface。你可以像这样检查:

if (ExternalInterface.availabe) {...}

希望对某人有所帮助...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多