这是一个困扰了我好几天几乎让我抓狂的问题。我的Ionic应用开发完成了,进入了真机测试阶段,我使用了魅族,三星,锤子,小米,OPPO,VIVO等品牌的真机进行测试。奇怪的事情发生了,小米手机和VIVO的某个型号的手机上进行测试的时候,应用无法加载服务端的数据,也就是接口请求怎么都无法成功,而在其他手机上确是一切正常。我不停的百度,谷歌也找不到答案,就连StackOverFlow这一次也没能帮助到我。因为通过vConsole来查看真机调试的错误消息打印的时候,打印出来的信息也只有简单的一些信息,这种错误没有明确的原因,很多原因都可能导致这种错误的发生。
错误的关键信息
Error{message:"Uncaught(in promise):TypeError:..."}
如图:
老师的解决方案
根据上面的这些信息去网上搜真的搜不到答案。
就在我快要崩溃的时候,我去问了一下大地老师,老师应该是经验丰富,遇到过这样的问题,一下就给出来问题出现的原因和解决方案。如下图:
于是我看了一下小米手机,确实是Android9,而其他的正常的手机都是Android9以下的版本,而且我的所有的接口请求地址使用的都是http
而不是https
请求,这就是报错的根本原因。
于是我打开了老师给的那个链接,也就是解决的方案。
配置方法
按照文章中给出的方法进行了如下设置:
1.在AndroidManifest.xml
文件的application
标签中添加这样一段代码android:networkSecurityConfig="@xml/network_security_config"
如下图所示:
2.然后找到res
目录下的xml
目录,然后新建一个名字叫做network_secruity_config
的文件,如下图:
文件的内容为:
<?xml version='1.0' encoding='utf-8'?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
然后再重新构建项目,打包到手机上运行,问题得以解决。
这个配置大概就是允许了http
请求吧,要知道,我们如果在项目中引入了一些第三发sdk
的话,我们的第三方sdk
里面也许用的都是http
请求的方式。所以不管你的接口有没有使用https
请求,都建议加上上面的配置。
总结:
Android9以上的网络请求都要求使用https
请求,这个问题在原生Android上也是存在的,由于报错信息不明确,我们很难到网上搜索到答案。简书的那篇文章作者把这个问题命名为"ionic4真机 android9.0 http请求失败问题"是很准确的,但是我真的没有想到是这个问题。所以,有些坑对新手来说,真的很难,有老师带,是非常幸福的。
文章评论