Ionic framework 安卓9上的Ionic HTTPS请求失败

Ionic framework 安卓9上的Ionic HTTPS请求失败,ionic-framework,https,android-9.0-pie,Ionic Framework,Https,Android 9.0 Pie,免责声明:这看起来非常像,但事实并非如此 在今天更新我们的应用程序之后,我们面临着一个难以置信的奇怪和困难的问题 我们正在为Android开发一款Ionic v1应用程序。它使用Cordova Android 7。今天,当我们将一个新的更新上传到play store时,我们发现一个限制迫使我们从28开始瞄准SDK。我们将添加到config.xml文件中,重新构建了该应用程序,在一些智能手机上进行了测试并上传。发布后,我们发现Android 9设备上的所有网络通信都出现故障。我们确信这将是流行的,

免责声明:这看起来非常像,但事实并非如此

在今天更新我们的应用程序之后,我们面临着一个难以置信的奇怪和困难的问题

我们正在为Android开发一款Ionic v1应用程序。它使用Cordova Android 7。今天,当我们将一个新的更新上传到play store时,我们发现一个限制迫使我们从28开始瞄准SDK。我们将
添加到
config.xml
文件中,重新构建了该应用程序,在一些智能手机上进行了测试并上传。发布后,我们发现Android 9设备上的所有网络通信都出现故障。我们确信这将是流行的,所以我们将所有URL更改为HTTPS。但问题依然存在。然后,我们再次构建应用程序,但在清单上使用可调试属性,以便我们可以检查应用程序并查看错误,我们发现,如果我们打开可调试功能,错误不会发生-我们只是将其添加到清单中,我们仍然使用
--release
标志进行构建

因此,最后一种情况是:

  • http请求只有在针对SDK 28之后才会失败,只有在Android 9设备上,并且只有在应用程序是使用
    --release flag
    构建的,并且我们没有将可调试属性放在清单上时才会失败
  • 如果我们改变上面的任何一点,错误就会消失,所以无法调试
  • 应用程序正在所有请求上使用https
  • 当应用程序失败时,请求无法到达服务器,我们已经注意到了这一点

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

最后,这似乎是某种明文错误,特别是超出了任何规范。我们的发现是

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