我有一个针对iOS和Android的移动应用。它通过HTTPS发出登录请求(使用带有HTTPService的POST)。通过ADL在我的开发盒上调试时以及在iOS 4.2和iOS 5上编译和测试时,一切正常。
在我的测试应用程序或设备浏览器中向其他域(如Twitter等)发出HTTPS请求时,Android设备也能正常工作。
我只有几个测试Android设备,他们正在运行2.3.3但没有一个会成功连接。通过USB进行调试时,我可以看到HTTPService调用正在返回带有IOErrorEvent#2032的FaultEvent。
经过研究,我发现Android操作系统在某些SSL证书上存在一些问题,而在服务器上使用的发行者是'VeriSign Class 3 International Server CA - G3',但我还没有找到任何可行的解决方法/解决方案。有人遇到过这种情况么?我知道它非常具体。
只是想添加在调度ioErrorEvent 2032之前立即返回HTTP状态代码0。我已经检查了Adobe的HTTP文档以获取HTTPStatusEvent,0似乎是默认的。 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/HTTPStatusEvent.html
HTTPStatusEvent objects are always sent before error or completion events. An HTTPStatusEvent object does not necessarily indicate an error condition; it simply reflects the HTTP status code (if any) that is provided by the networking stack. Some Flash Player environments may be unable to detect HTTP status codes; a status code of 0 is always reported in these cases. Just wanted to add additional findings...through testing we were able to use that same certificate on another server - and despite security warnings, I was able to get data on my test Android device. This makes me think that the issue may be related to the server....It's hosted by Rackspace so we're going to reach out to them to attempt more troubleshooting.
答案 0 :(得分:1)
我在Stream error 2032
上遇到了同样的问题https: requests
,并且能够通过升级到更新的AIR运行时来解决它。我注意到在一个测试设备上发生了错误,而不是另一个测试设备发生错误,主要区别在于安装了AIR 3.1
错误的错误,没有错误的错误发生了AIR 3.2
。
我们现在使用强制AIR运行时(版本 3.3 )打包应用程序。由于FlashBuilder
预先安装了AIR 3.1
,因此需要下载新的AIR SDK
并将其覆盖在FlashBuilder
上。
答案 1 :(得分:0)
不同的虚拟Flash查看器根据平台不同地解决此类错误。最好的办法是应用一堆错误处理程序,看看结果如何。
我将从这个长期运行的谷歌搜索结果中引用一个完整的“解决方案”: http://www.judahfrangipane.com/blog/2007/02/15/error-2032-stream-error/
尝试侦听 HTTP_STATUS事件,然后为所有错误类型添加事件处理程序,以获得更细粒度的响应。
示例:
public function doRequest(url:String = "http://www.example.com/page.php?something=whatYouWant"):void {
var fileRequest:URLRequest = new URLRequest(url);
var myLoader:URLLoader = new URLLoader();
myLoader.addEventListener(Event.COMPLETE, onLoaderReady);
myLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, function(evt:Object):void{handleError(evt,"HTTPStatusEvent.HTTP_STATUS");});
myLoader.addEventListener(IOErrorEvent.IO_ERROR, function(evt:Object):void{handleError(evt,"IOErrorEvent.IO_ERROR");});
myLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function(evt:Object):void{handleError(evt,"SecurityErrorEvent.SECURITY_ERROR");});
myLoader.load(fileRequest);
}
private function handleError(evt:Object , listenerType = "Anonymus"):void{
trace('handleError listenerType '+listenerType+'\nError: '+evt);
}
由于它是专门的Android,请确保为其添加适当的“权限”以使用Internet,检测Manifest文件中的连接等:
<android>
<manifestAdditions><![CDATA[
<manifest>
<!-- See the Adobe AIR documentation for more information about setting Google Android permissions -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
</manifest>
]]></manifestAdditions>
</android>
答案 2 :(得分:0)
很奇怪。结束了必须设置代理才能使其正常工作。
答案 3 :(得分:0)
我刚在Android上使用AIR 25.0.0.134遇到过此问题。 IOS和Desktop使用相同的代码没有问题。
我发现问题是我使用的网址有额外的(不可见)字符。即%A0
解决方法是转义网址并删除%A0的所有实例,然后移除unescape并继续下载文件。
var url:String = String(escape(ev.target.data)).replace(/%0A/gi, "");
downloadThisFile(unescape(url));