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
标志进行构建。
所以,最终的场景是:
- http 请求仅在以 SDK 28 为目标后失败,仅在 Android 9 台设备上失败,并且仅当应用程序是使用
--release flag
构建的并且我们没有将 debuggable 属性放在清单上时
- 如果我们更改上面的任何一点,错误就会消失,因此无法调试
- 应用对所有请求都使用 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 请求被解释为明文请求并因此被阻止,直到我们明确允许它们.
免责声明:这看起来与
今天更新我们的应用程序后,我们遇到了一个非常奇怪和棘手的问题。
我们正在维护 Android 的 Ionic v1 应用程序。它使用 Cordova-Android 7。今天,当我们向 Play 商店上传新更新时,我们发现了一个限制,迫使我们从 28 开始定位 SDK。我们将 <preference name="android-targetSdkVersion" value="28" />
添加到 config.xml
文件,重新构建应用程序,在一些智能手机上进行测试并上传。分发后,我们发现 Android 9 台设备上的所有网络通信均失败。我们确信这将是流行的 --release
标志进行构建。
所以,最终的场景是:
- http 请求仅在以 SDK 28 为目标后失败,仅在 Android 9 台设备上失败,并且仅当应用程序是使用
--release flag
构建的并且我们没有将 debuggable 属性放在清单上时 - 如果我们更改上面的任何一点,错误就会消失,因此无法调试
- 应用对所有请求都使用 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 请求被解释为明文请求并因此被阻止,直到我们明确允许它们.