全栈工程师_java全栈工程师_全栈开发者学习经验总结

  • 首页
  • 开发工具
    • 软件安装
    • 软件使用
  • 前端
    • Ionic
    • Android
    • Capacitor
    • Angular
    • Vue
    • 苹果开发者账号
  • 后端
    • Java
    • Python
    • MyBatis
    • Spring
    • SpringBoot
    • SpringMVC
    • SpringCloud
  • 服务器
    • Linux
    • MySQL
    • Nginx
    • Tomcat
    • Docker
  • 其他
    • 生活碎片
    • 报错专区
  • 我
lipsuper
专注产出高质量原创手打文章
  1. 首页
  2. 前端
  3. Ionic
  4. 正文

关于Ionic应用在个别手机上无法请求网络问题的解决-安卓9以上要使用https请求的大坑

2020年8月27日 911点热度 0人点赞 0条评论

这是一个困扰了我好几天几乎让我抓狂的问题。我的Ionic应用开发完成了,进入了真机测试阶段,我使用了魅族,三星,锤子,小米,OPPO,VIVO等品牌的真机进行测试。奇怪的事情发生了,小米手机和VIVO的某个型号的手机上进行测试的时候,应用无法加载服务端的数据,也就是接口请求怎么都无法成功,而在其他手机上确是一切正常。我不停的百度,谷歌也找不到答案,就连StackOverFlow这一次也没能帮助到我。因为通过vConsole来查看真机调试的错误消息打印的时候,打印出来的信息也只有简单的一些信息,这种错误没有明确的原因,很多原因都可能导致这种错误的发生。

错误的关键信息

Error{message:"Uncaught(in promise):TypeError:..."}

如图:

ionic应用请求网络错误详情

老师的解决方案

根据上面的这些信息去网上搜真的搜不到答案。

就在我快要崩溃的时候,我去问了一下大地老师,老师应该是经验丰富,遇到过这样的问题,一下就给出来问题出现的原因和解决方案。如下图:

安卓9以上需要使用https请求

安卓9以上请求网络的注意事项

于是我看了一下小米手机,确实是Android9,而其他的正常的手机都是Android9以下的版本,而且我的所有的接口请求地址使用的都是http而不是https请求,这就是报错的根本原因。

于是我打开了老师给的那个链接,也就是解决的方案。

 

配置方法

按照文章中给出的方法进行了如下设置:

1.在AndroidManifest.xml文件的application标签中添加这样一段代码android:networkSecurityConfig="@xml/network_security_config"如下图所示:

安卓配置允许http请求的方法

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请求失败问题"是很准确的,但是我真的没有想到是这个问题。所以,有些坑对新手来说,真的很难,有老师带,是非常幸福的。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 报错 踩坑
最后更新:2020年8月27日

lipsuper

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

取消回复

COPYRIGHT © 2021 lipsuper.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

渝ICP备2021004735号-1

渝公网安备 50011202502306号