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 调用的主要内容,如果未能解决你的问题,请参考以下文章

对Android应用签名

如何对Android的APP进行签名

无法生成签名的apk,kotlin

Android开发之通过apksigner对apk进行v2签名

Android Studio 之签名

React Native v0.59.2 android签名apk卡在启动画面