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 - 相机没有所有选项

Cordova:[错误:请安装 Android 目标:“android-21”

Cordova:适用于 Android 的 Facebook 插件构建错误

Cordova隐藏android源代码