【问题标题】:Android Release version cannot connect to serverAndroid Release 版本无法连接服务器
【发布时间】:2018-04-20 16:59:22
【问题描述】:

我们有一个在 ios 上运行良好的 cordova 应用程序,并且适用于 Android 的调试版本运行良好。问题是当我们构建发布版本时。应用程序将启动,但所有 ajax 调用都不起作用。

我们已经尝试了很多东西。我们更新了 cordova,我们将 config.xml 更改为:

<allow-navigation href="*"/>

到目前为止唯一有效的是将发布 apk 的 AndroidManifest.xml 更改为可调试的。我们这样做是为了调试问题,但它实际上是为了进行 ajax 调用。我尝试上传该 APK,但 Google Play 不接受可调试的 apk。

叹息.....

另一件可能有用的信息是我们最近不得不更改服务器的域。我们编辑了所有文件以指向适当的服务器。所以他们指向正确的主机,但我认为这可能是证书或 CORS 的问题。

如果有人有任何想法,我们真的可以使用一些帮助。

【问题讨论】:

  • 网络/控制台对这些网络请求有何看法?
  • 所以因为它是发布 apk,我们无法从控制台看到任何内容。这就是为什么我们考虑将 Android 清单更改为可调试以查看网络/控制台的内容,但由于将其更改为可调试解决了问题,因此我们无法获得任何有用的信息。
  • 哦,我的错。我的愚蠢问题。您是否有能力查看是否有任何请求从服务器端通过? IE。如果您正在向您的服务器发出 api 请求,您可以查看该请求是否在该端进行。
  • 我没想到。我会试一试。您在请求中有什么特别要寻找的吗?
  • 我检查了服务器请求日志,它既没有记录访问日志也没有记录错误日志。

标签: android cordova


【解决方案1】:

我和我的同事遇到了与此非常相似的问题,我们尝试了这些答案中所说的所有内容,但没有任何效果。我们终于发现我们的问题是科尔多瓦的 ssl 证书问题。这是一个可怕的问题,因为它从来没有准确地告诉你这是一个问题。
这是对我们帮助最大的文章的链接:

http://ivancevich.me/articles/ignoring-invalid-ssl-certificates-on-cordova-android-ios/

真的希望这会有所帮助!

【讨论】:

  • 请在此处发布解决方案的相关部分,因为如果链接页面更改或消失,此答案可能会变得无用
  • 我很高兴这有帮助!
【解决方案2】:

此类错误最常见的问题是应用缺少白名单插件。对于 Android 应用程序是必需的,但对于 iOS 应用程序则不需要。

cordova plugin add cordova-plugin-whitelist

然后在您的 config.xml 中,您可以添加以下内容以允许所有内容:

<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
<access origin="*" />

【讨论】:

  • 我们已经添加了插件并且我们已经获得了所有的允许意图。我们也得到了访问来源。
【解决方案3】:

链接的解决方案仍然适用于 Cordova 9。由于我还不能对答案发表评论,因此我按照 Nico 的意愿在这里写下相关部分,以防链接在某些时候不再有效:

Android 平台上的 Cordova 允许无效证书,但仅限于构建模式,而不是发布模式,因为 WebView 不允许“不安全”请求。您必须在以下函数中从 Cordova 更改原始平台代码中的 3 行:

public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
  final String packageName = this.cordova.getActivity().getPackageName();
  final PackageManager pm = this.cordova.getActivity().getPackageManager();

  ApplicationInfo appInfo;
  try {
    appInfo = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA);
    if ((appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
      // debug = true
      handler.proceed();
      return;
    } else {
      // debug = false
      // THIS IS WHAT YOU NEED TO CHANGE:
      // 1. COMMENT THIS LINE
      // super.onReceivedSslError(view, handler, error);
      // 2. ADD THESE TWO LINES
      // ---->
      handler.proceed();
      return;
      // <----
    }
  } catch (NameNotFoundException e) {
    // When it doubt, lock it out!
    super.onReceivedSslError(view, handler, error);
  }
}

对于 Cordova 版本 5 及更高版本,包含该函数的文件是 SystemWebViewClient.java。在以前的版本中,它是 CordovaWebViewClient.java。

路径: V5+:项目/平台/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewClient.java V4-:项目/平台/android/CordovaLib/src/org/apache/cordova/CordovaWebViewClient.java

来源:内容来自link mentionend above by Nico Haase and written by JC Ivancevich

【讨论】:

    猜你喜欢
    • 2022-11-13
    • 2020-02-27
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 2015-10-29
    • 2012-11-12
    相关资源
    最近更新 更多