Ionic HTTPS 请求在 Android 9 上失败

Ionic HTTPS requests failing on Android 9

免责声明:这看起来与 非常相似,但事实并非如此!

今天更新我们的应用程序后,我们遇到了一个非常奇怪和棘手的问题。

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

所以,最终的场景是:

那么这到底是怎么回事呢?

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

<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 请求被解释为明文请求并因此被阻止,直到我们明确允许它们.