免责声明:这看起来和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
标志进行构建。
所以,最终的方案是:
--release flag
构建并且我们未在清单上放置debuggable属性时,该错误那么,这到底是怎么了?
最后,从理论上讲,这似乎是某种明文错误,不符合任何规范。我们的发现是添加
<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请求被解释为明文请求,因此被阻止,直到我们明确允许它们为止。