Android设备调用本地REST API失败问题求助(Ionic场景)
我来帮你搞定这个问题!这种真实设备调用本地API失败的情况我碰到好多次了,主要是几个常见的坑,咱们一步步来排查解决:
问题分析与解决方案
浏览器和模拟器能正常访问,但真实Android设备不行,核心原因基本逃不开网络连通性或者Android安全策略这两类问题,咱们逐个击破:
1. 先确认设备与Windows机器的网络连通性
这是最常见的问题,先把基础网络打通:
- 确保你的Android设备和部署API的Windows电脑连接在同一个WiFi网络下(不能电脑连有线、设备连另一个WiFi,必须处于同一网段)
- 用Windows命令行执行
ipconfig,确认你用的abc.def.gh.i确实是当前电脑有效的局域网IP(别是过期的或者公网IP) - 直接在Android设备的浏览器里访问
http://abc.def.gh.i:8088/check-price/code-001,如果打不开,说明网络层面不通:- 检查Windows防火墙:打开Windows Defender防火墙,新建入站规则,允许8088端口的TCP连接
- 暂时关闭杀毒软件测试,有些杀毒软件会拦截非标准端口的请求
2. 配置Android的明文HTTP访问权限
从Android 9(API级别28)开始,系统默认禁止明文HTTP请求,只允许HTTPS。如果你的API是HTTP协议,肯定会被拦截:
- 在Ionic项目的
android/app/src/main/res/xml目录下创建network_security_config.xml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">abc.def.gh.i</domain> </domain-config> </network-security-config>
- 打开
android/app/src/main/AndroidManifest.xml,在<application>标签里添加安全配置引用:
<application ... android:networkSecurityConfig="@xml/network_security_config" ...>
3. 确认API的CORS配置(虽然浏览器能访问,但还是补个检查)
虽然你说浏览器能正常调用,但还是确认下API的跨域配置是否完整,避免后续其他场景出问题:
- 在你的REST API服务中,添加跨域允许的响应头:
Access-Control-Allow-Origin: *Access-Control-Allow-Methods: GET, POST, OPTIONSAccess-Control-Allow-Headers: Content-Type
4. 部署时的小细节
- 绝对不要用
localhost或者127.0.0.1访问API,真实设备无法识别电脑的本地回环地址,必须用Windows机器的局域网IPabc.def.gh.i - 每次修改配置后,要用
ionic cordova run android --e78ab88d重新编译安装到设备,别用之前的旧安装包
按照这几步排查下来,基本就能解决真实设备无法调用API的问题了。
内容的提问来源于stack exchange,提问作者Kumar
相关产品推荐
相关产品推荐

