Android 11上的离子HTTPS请求失败

问题描述 投票:0回答:1

免责声明:这看起来和Ionic Native HTTP does not work for Anroid 9 (Pie) and up?一样令人难以置信,但事实并非如此!

今天更新我们的应用程序后,我们面临一个难以置信的奇怪而艰巨的问题。

我们正在维护适用于Android的Ionic v1应用。它使用的是Cordova-Android7。今天,当我们将新的更新上传到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个回答
0
投票

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

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

config.xml文件上的android平台标签即可解决此问题。因此,我们可以确保在我们的Io​​nic 1 + Cordova-Android 7 + Cordova CLI 8 + Ionic CLI 4 + HTTPS +不可调试的生产构建方案中,HTTPS请求被解释为明文请求,因此被阻止,直到我们明确允许它们为止。

© www.soinside.com 2019 - 2024. All rights reserved.