【问题标题】:Ionic HTTPS requests failing on Android 9Ionic HTTPS 请求在 Android 9 上失败
【发布时间】:2019-11-07 21:30:41
【问题描述】:

免责声明:这看起来与 Ionic Native HTTP does not work for Anroid 9 (Pie) and up? 非常相似,但事实并非如此!

今天更新我们的应用程序后,我们面临着一个非常奇怪和困难的问题。

我们正在维护适用于 Android 的 Ionic v1 应用。它使用 Cordova-Android 7。今天,当我们向 Play 商店上传新更新时,我们发现了一个限制,迫使我们从 28 开始以 SDK 为目标。我们将 <preference name="android-targetSdkVersion" value="28" /> 添加到 config.xml 文件中,重新构建了应用程序,在一些智能手机上测试并上传。分发后,我们发现 Android 9 设备上的所有网络通信都失败了。我们确信这将是流行的cleartext error,因此我们将所有 URL 更改为 HTTPS。但问题依然存在。然后我们再次构建应用程序,但在清单上使用 debuggable 属性,因此我们可以检查应用程序并查看错误,我们发现如果我们打开可调试功能,错误不会发生 - 我们只是将其添加到清单,我们仍在使用--release 标志进行构建。

所以,最终的场景是:

  • http 请求仅在以 SDK 28 为目标后失败,仅在 Android 9 设备上,并且仅当应用使用 --release flag 构建且我们未将 debuggable 属性放在清单中时才会失败
  • 如果我们更改上述任何一点,错误就会消失,因此无法调试
  • 应用对所有请求都使用 https
  • 当应用程序失败时,请求不会到达服务器,我们已经看过了

那么这到底是什么失败了呢?

【问题讨论】:

    标签: ionic-framework https android-9.0-pie


    【解决方案1】:

    最后,它似乎是某种不符合任何规范的明文错误。我们的发现是添加

    <edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application">
      <application android:usesCleartextTraffic="true" />
    </edit-config>
    

    config.xml文件上的android平台标签解决了这个问题。因此,我们可以确保在我们的 Ionic 1 + Cordova-Android 7 + Cordova CLI 8 + Ionic CLI 4 + HTTPS + 不可调试的生产构建场景中,HTTPS 请求被解释为明文请求,因此在我们明确允许之前被阻止。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多