我有一个PhoneGap应用程序,该应用程序在iOS上运行良好,但是在为发布版本进行设置时,无法在Android上运行.
我正在使用Phonegap CLI创建应用程序.
$phonegap --version
4.2.0-0.24.2
设置了用于网络访问和白名单的config.xml选项:
<access origin="*" />
<feature name="http://api.phonegap.com/1.0/network" />
我已验证我的AndroidManifest.xml正在请求互联网权限:
<uses-permission android:name="android.permission.INTERNET" />
我的API返回适当的ACCESS-CONTROL-ALLOW-ORIGIN标头值:
Access-Control-Allow-Origin: *
为了很好,我也将其添加到了JS中:
$.support.cors = true;
如果我设置android远程调试属性,以便可以从chrome:// inspect连接,则网络请求成功,一切正常:
<application android:debuggable="true" ... >
但是,如果我只是删除了android:debuggable =“ true”以便可以提交到Play商店,重新编译并再次测试,则我的跨域Ajax请求将失败.当它们失败时,它们将返回jqXHR.status = 0和jqXHR.readyState = 0,根据我的经验,这表明飞行前OPTIONS请求由于某种原因而失败.
不幸的是,当我启用调试并连接以查看网络请求时,所有内容都可以正常工作-因此我看不到有什么问题.我已经恢复到alert()-进行了各种尝试来找出正在发生的事情……但是我没有得到更多.
我也可以在笔记本电脑的浏览器中使用file:// url(在Android应用程序中是打开的方式)运行应用程序,也可以通过a local webserver(在localhost:3030)运行它,在两种情况下-域请求可以正常工作.
我不知道该怎么办.我还可以提醒其他有关该错误的信息吗? (也许是导致此问题的其他标头?)
解决方法:
我相信我已经找到了问题:Android不喜欢我的中间SSL证书之一.这与我注意到的行为一致:
>在iOS上运作良好
>在笔记本电脑上的Chrome中正常运行(文件://和本地主机)
>使用http://时工作正常
>使用https://时出现明显的CORS飞行前请求失败(statusCode = 0,status = 0)
现在,我将使用对我的api的非SSL访问权限,这样我就可以继续前进了,我将让服务器管理员知道SSL存在问题–可能是Android不信任的中间证书.