【问题标题】:Cordova android app - Release build - could not connect to serverCordova android 应用程序 - 发布版本 - 无法连接到服务器
【发布时间】:2014-12-01 08:34:56
【问题描述】:

我正在开发 Cordova 应用程序。这会使用 https url 加载应用程序加载的客户列表。

在调试模式下运行时(使用cordova run android)应用程序工作正常,但是当我为同一个应用程序创建发布版本时,应用程序无法连接到服务器。给出错误“无法连接到服务器。状态 0”。

这是我的技术堆栈跟踪。

  1. 科尔多瓦 v4.0
  2. Cordova Android 平台 v3.6.4
  3. Dojo Mobile 1.8.3

更新:

我发现SSL证书根安装错误,安卓浏览器将其视为安全问题。我在安卓浏览器上点击证书时发现了这一点。

现在我安装了有效的 SSL 证书,并在 Android 浏览器上进行了验证(清除缓存后),但应用程序仍然无法连接到 URL。

看来,不知何故,android 缓存了错误的证书?

【问题讨论】:

  • 你检查过Release版本的app是否开启了CORS?
  • 它不使用CORS,它们在同一个域中具有不同的子域。

标签: android cordova ssl-certificate release browser-cache


【解决方案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 时,我将其更改为更高的版本,它构建并连接到服务器。

    【讨论】:

      猜你喜欢
      • 2021-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多