Android 应用在签名后无法对 HTTPS 进行 ajax 调用
Posted
技术标签:
【中文标题】Android 应用在签名后无法对 HTTPS 进行 ajax 调用【英文标题】:Android app fails to make ajax calls to HTTPS after signing 【发布时间】:2015-09-28 09:28:52 【问题描述】:我正在使用 PhoneGap Build 开发一个 android 应用,但遇到了一个烦人的问题:
我对我们的 HTTPS 服务器进行 ajax GET 调用,如果我只是打包应用程序的调试版本,它就可以正常工作。
只要我用我的密钥签署应用程序,并在我的手机或模拟器上试用该应用程序,它就会失败并出现以下错误:
NetworkError: A Network error occured.
如果我把所有的https地址都改成http,用同样的方式打包和签名,它突然又开始工作了。
总结一下:
未签名的 apk : - https 和 http 都可以工作
签名的 apk:只有 http 有效。
我想澄清一下,android 的权限是不变的,只有 https 是不同的。
【问题讨论】:
您的手机不信任您的服务器证书,当应用未签名时它可以工作,因为 debugable 设置为 true 并忽略错误证书,当您对其签名时,debugable 更改为 false 感谢您的回复!有什么解决方法吗?除了获得新的服务器证书...? 不,因为您使用的是 phonegap 构建,所以您无法编辑本机代码。如果你切换到本地开发者,你可以编辑一个类来忽略 ssl 错误。 这个类是什么?SystemWebViewClient
,可以修改onReceivedSslError
,把handler.proceed();
放在第一行
【参考方案1】:
您可以使用此插件来允许不受信任的证书: https://www.npmjs.com/package/cordova-plugin-certificates
当您的应用启动时,只需调用:
cordova.plugins.certificates.trustUnsecureCerts(true);
【讨论】:
你能帮我在哪里调用这个函数吗? 可以在onDeviceReady函数中运行。 非常感谢。当已经指定 CSP 并安装插件白名单时,这种方法让我免于头痛。但仍然无法使用 AJAX 请求。而在调试模式下是没有问题的。你摇滚!!!以上是关于Android 应用在签名后无法对 HTTPS 进行 ajax 调用的主要内容,如果未能解决你的问题,请参考以下文章