Cordova安卓应用从Play商店下载后无法获取远程数据
解决Cordova Android应用无法加载远程HTTP数据问题
核心原因
Android 12(API 31)及以上版本(你的targetSdkVersion为34)默认禁止明文HTTP请求,而你的前端请求使用的是http://api.damekex.com明文地址。浏览器环境允许明文请求,但Android应用会拦截这类请求,导致无法获取数据。
解决方案
方案1:切换到HTTPS(推荐)
这是最安全且符合Play商店规范的方案:
- 为后端接口配置HTTPS服务,确保
https://api.damekex.com可正常访问 - 修改前端请求代码中的URL,将
http://替换为https://:fetch('https://api.damekex.com/ajax-view') fetch('https://api.damekex.com/live') - 同步更新
config.xml中的域名配置,确保所有相关规则使用HTTPS地址
方案2:临时允许指定域名的明文请求(不推荐长期使用)
若暂时无法切换HTTPS,可通过Android网络安全配置放行指定域名的明文流量:
- 在Cordova项目根目录下创建
res/xml/network_security_config.xml文件,内容如下:<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">api.damekex.com</domain> </domain-config> </network-security-config> - 在
config.xml中添加偏好配置,让Cordova编译时自动应用该规则:<preference name="AndroidNetworkSecurityConfig" value="res/xml/network_security_config.xml" />
额外配置优化
- 清理
config.xml中的冗余规则,保留必要的权限配置即可:<access origin="https://api.damekex.com/*" /> <access origin="https://code.jquery.com/*" /> <allow-navigation href="https://api.damekex.com/*" /> <allow-navigation href="https://code.jquery.com/*" /> <allow-intent href="*" /> - 若使用HTTPS,当前配置的Content-Security-Policy中
connect-src *已满足请求需求
排查验证
使用Android Studio的Logcat工具查看应用日志,过滤关键词CLEARTEXT或Network,确认是否存在明文请求被拦截的错误信息,以此验证问题根源。
内容的提问来源于stack exchange,提问作者olawole taiwo
相关产品推荐
相关产品推荐

