导出APK后,Phonegap / Cordova白名单跨域SSL请求无效

我创建了一个需要与自签名SSL服务进行通信的phonegap应用程序。

我在res / xml / cordova.xml中将我的URL列入白名单,如下所示:

当我从eclipse运行和构建时,这工作正常,但如果我然后导出并签署我的应用程序并手动安装APK,那么应用程序无法与我的Web服务进行通信。

与服务器的通信使用Sencha Touch库进行,如下所示:

 Ext.Ajax.request({ url: 'https://www.mydomain.com', method: 'get', success: function(result) { }, failure: function(result) { } }); 

任何帮助非常感谢

    问题是您使用的是自签名证书。 默认情况下,Android WebView不允许使用自签名SSL证书。 PhoneGap / Cordova会在CordovaWebViewClient类中覆盖它,但不会偏离它的行为; 如果应用程序是经过调试签名的,它将proceed并忽略错误,否则将失败。

    您可以在应用程序中更改上面链接的代码,并使onReceivedSslError方法始终调用handler.proceed() – 但不建议这样做。 不要使用自签名证书!

    我做了以下以解决限制(目前使用Cordova 1.7.0)。 这绝对是不安全的:

     public class MyWebViewClient extends CordovaWebViewClient { public MyWebViewClient(DroidGap ctx) { super(ctx); } @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { // testing against getPrimaryError() or hasErrors() will fail on Honeycomb or older. // You might check for something different, such as specific info in the certificate, //if (error.getPrimaryError() == SslError.SSL_IDMISMATCH) { handler.proceed(); //} else { // super.onReceivedSslError(view, handler, error); //} } } 

    然后在主要活动中:

     @Override public void init() { super.init(); //pass in our webviewclient to override SSL error this.setWebViewClient(this.appView, new MyWebViewClient(this)); }