5

好的,烧了 4 个小时,所以我求助于 SO 以寻求帮助。

以下是事实,以便您快速了解:

  • 我们有一个现有的 AIR Mobile 应用程序,可以在我的笔记本电脑上正常运行,并且我们在 HTTP 模式下测试过的每台 Android 设备(Kindle、Nexus、Asus A100)

  • 一旦我们切换到 HTTPS,只有笔记本电脑和 Kindle 设备会连接到服务器

  • 在其他设备上,我收到了 FaultEvent 返回,错误提示:“发送失败。Channel.Connect.Failed 错误 NetConnection.Call.Failed https://www.example.com/flex2gateway/cfamfsecure/

  • 我可以在浏览器中点击 Nexus/A100 上面的 URL,它会返回一个空白页面,正如预期的那样

  • 使用相同连接的基于 Flex 的应用程序多年来一直没有问题 - 这是第一个使用该 HTTPS 连接的 AIR 应用程序

  • 我正在使用 Captive Runtime 功能

  • ColdFusion 9 后端

  • 我无法调试网络流量,因为它只发生在平板电脑上,而且我目前不知道如何在平板电脑上捕获流量,就像我可以在笔记本电脑上使用 Fidder 一样(正在研究)

我会尽快提供您需要的任何其他信息 - 请告诉我。

除了上述之外,我还查看了其他一些内容,例如:确保 crossdomain.xml 文件存在并且设置正确,更改 CF 的 services-config.xml 文件中的设置等。

我目前的想法是,它可能与 SSL 证书中的链接有关——比如根 CA 在 Nexus 上不受信任之类的?(哪个是 GlobalSign Root CA)或者它与 Flex 时代的默认浏览器和 IE/代理有关?

以前从未见过这种情况,所以我会尽我所能获得帮助。

[更新]:我创建了一个小样本,您可以使用它来复制此问题: https ://www.dropbox.com/s/5nmilo3tbwr2k8d/HTTPTestSource.zip

它将包含您需要的一切:源代码、编译的 .AIR(用于桌面)、编译的 .APK(用于 Android 设备)。桌面在 HTTP 和 HTTPS 中运行良好,而移动 APK 仅适用于 HTTP。如果您愿意,我还提供了一个示例 CFC,可以放在您自己的服务器上。

感谢您阅读到这里!

4

3 回答 3

4

[解决]

好吧,我让它适合我的情况 - 希望这对其他人有帮助。

问题在于 AIR Captive Runtime。使用 HTTPS 时似乎不起作用。我不得不切换到它,因为我的第一个开发硬件是 Kindle Fire,并且 AIR 运行时预装在 Kindle Fire 上,但我需要最新版本的 AIR。所以,我只是打开了 Captive Runtime 并继续我的快乐方式。

当我们上线时,我们将端点更改为我们的 HTTPS 服务器,Kindle 继续工作,所有其他平板电脑都失败了。

为了解决这个问题,我关闭了 Captive Runtime 并重新编译,现在卸载/重新安装后,它可以在我的所有平板电脑上运行,除了Kindle Fire,我只需要为其提供不同的安装。

希望这可以帮助其他有同样问题的人。

于 2013-03-02T22:03:01.010 回答
1

感谢您更新您的问题。它确实帮助我找到了解决问题的方法。我安装了 AIR 3.7 以及来自 Apache Flex 的 Flex 4.10 构建,并且能够成功连接到 https 连接(在 Flash 构建器中导出发布构建后使用 Captive 运行时)。因此,遇到此问题的任何人都应该只使用较新的 AIR SDK 之一,它应该可以解决它。

于 2013-08-29T03:31:29.080 回答
0

PRB,

我会先说我绝不会塑造或形成 flex 开发人员。我最近在研究工作中遇到的 crossdomain.xml 问题时发现了这些信息。我在 adobe 网站上发现了一个页面,指出当调用 flex 应用程序也不在 HTTPS 连接之后时,在 HTTPS 连接之后调用 Web 服务时存在问题。

您必须将 secure="false" 属性添加到 allow-access-from 标记。

<cross-domain-policy>
    <allow-access-from domain="*.mydomain.com" secure="false"/>
</cross-domain-policy>

我从http://livedocs.adobe.com/flex/3/html/help.html?content=security2_15.html得到这个。

评论部分中还有一些额外的细节可能也会有所帮助。您可以通过 HTTPS 调用 WSDL,但如果 WSDL 中的位置字段具有 HTTP:// 而不是 HTTPS://,那么您所有剩余的调用都将通过 HTTP 而不是 HTTPS。

--

附带说明一下,flash 播放器和 flex 似乎使用浏览器的 http 机制进行传输,而 AIR 直接实现它,这可以解释为什么您的 flex 应用程序失败而 Air 应用程序正在运行。这也可能是为什么它在调试(使用开发环境 http 传输)和发布(切换到主机浏览器 http 传输)中工作的问题。

蒂姆·萨普

于 2013-02-27T21:47:29.277 回答