Cordova android 应用程序 - 发布版本 - 无法连接到服务器
Posted
技术标签:
【中文标题】Cordova android 应用程序 - 发布版本 - 无法连接到服务器【英文标题】:Cordova android app - Release build - could not connect to server 【发布时间】:2014-12-01 08:34:56 【问题描述】:我正在开发 Cordova 应用程序。这会使用 https url 加载应用程序加载的客户列表。
在调试模式下运行时(使用cordova run android)应用程序工作正常,但是当我为同一个应用程序创建发布版本时,应用程序无法连接到服务器。给出错误“无法连接到服务器。状态 0”。
这是我的技术堆栈跟踪。
-
科尔多瓦 v4.0
Cordova Android 平台 v3.6.4
Dojo Mobile 1.8.3
更新:
我发现SSL证书根安装错误,安卓浏览器将其视为安全问题。我在安卓浏览器上点击证书时发现了这一点。
现在我安装了有效的 SSL 证书,并在 Android 浏览器上进行了验证(清除缓存后),但应用程序仍然无法连接到 URL。
看来,不知何故,android 缓存了错误的证书?
【问题讨论】:
你检查过Release
版本的app是否开启了CORS?
它不使用CORS,它们在同一个域中具有不同的子域。
【参考方案1】:
我知道这个答案是在提出问题一年多之后,但是当我为特定客户向 Android 商店发布 Cordova 应用程序时,我遇到了完全相同的问题,并发现这个问题对我的特定客户来说是一个非常有用的线索问题:调试安装的版本可以连接到客户端的服务器,签名的发布版本不能。
事实证明,尽管我们通过 Web 浏览器、Postman 等测试工具以及设备上的调试应用程序都可以正常连接到具有 SSL 证书的服务器(在本例中为 Node.js 服务器),但问题出在在发布版本正确连接之前,还需要在我们的服务器上向证书颁发机构提供证书链。
【讨论】:
谢谢,你救了我天知道多少小时毫无意义的调试和搜索。 很高兴它有帮助。 (如果是这样,希望它得到投票。:p)欣赏这里的讽刺意味。我在 O/P 后 1.5 年回复,2 年后该解决方案帮助了其他人。爱上 Stack Overflow。 :) 它在 2022 年 3 月 15 日也有帮助,谢谢 :)【参考方案2】:对于在“现代”遇到同样问题的任何人:
Android 版本 28+ 需要在清单文件中设置安全连接,默认情况下它们在调试版本中被忽略。 要使 TEST 版本构建工作,您只需设置
android:usesCleartextTraffic="true"
在您清单的应用程序标签中,或按照以下信息正确设置
https://developer.android.com/training/articles/security-config
【讨论】:
【参考方案3】:可能回答得太晚了,但我认为这对其他人有用。 我有同样的问题并试图以不同的方式修复它。我的问题是应用程序构建但它无法连接到服务器。首先我认为它导致 ajax 有问题但这是真的 我在另一台计算机上测试它,它工作正常,
最后我做了一些方法,比如检查版本 gradlle 和 config.xml,
我的 config.xml 的内容是 =>
<?xml version='1.0.0' encoding='utf-8'?>
<widget id="com.example.dr" version="1.0.0" android-versionCode="5" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>myapp</name>
<description>
A sample Apache Cordova application that responds to the deviceready event.
</description>
<author email="dev@cordova.apache.org" href="http://cordova.io">
Apache Cordova Team
</author>
<content src="index.html" />
<access origin="*" />
<allow-intent href="*" />
<allow-intent href="*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<preference name="SplashScreen" value="screen" />
<preference name="SplashScreenDelay" value="3000" />
<preference name="SplashMaintainAspectRatio" value="true|false" />
<preference name="ShowSplashScreenSpinner" value="false"/>
<platform name="android">
<icon src="www/img/logo.png" density="ldpi" />
<allow-intent href="market:*" />
</platform>
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
</platform>
</widget>
当我检查 gradle 的版本是 2.2 时,我将其更改为更高的版本,它构建并连接到服务器。
【讨论】:
以上是关于Cordova android 应用程序 - 发布版本 - 无法连接到服务器的主要内容,如果未能解决你的问题,请参考以下文章
Cordova Android 插件 - 从 Cordova 插件打开一个 android 原生活动
Cordova 应用程序:Android 是不是支持 webassembly?
Cordova:[错误:请安装 Android 目标:“android-21”