React Native中Fetch请求SSL API时Android端报Network request failed问题
嘿,我之前也踩过Android端调用SSL接口Fetch失败的坑,结合你给出的报错信息,给你几个实用的排查方向和解决办法:
排查与解决步骤
1. 先查SSL证书的合规性
Android对SSL证书的校验比iOS严格得多,这是最常见的原因:
- 确认你的API服务器用的是正规CA颁发的证书,如果是测试环境的自签名证书,Android默认不会信任,必须手动配置
- 检查证书链是否完整:有些服务器只部署了叶子证书,没包含中间证书,iOS可能会自动补全,但Android会直接判定证书无效
2. 配置Android网络安全策略(针对自签名/特殊证书场景)
如果是测试环境用了自签名证书,或者需要临时放宽SSL校验(生产环境不建议这么做),可以按以下步骤配置:
- 在Android项目的
res/xml目录下创建network_security_config.xml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <!-- 替换成你的API域名,includeSubdomains=true表示包含子域名 --> <domain includeSubdomains="true">your-api-domain.com</domain> <!-- 如果是信任自签名证书,添加这段,把你的证书文件放在res/raw目录下 --> <trust-anchors> <certificates src="@raw/your_self_signed_cert"/> </trust-anchors> </domain-config> </network-security-config>
- 在
AndroidManifest.xml的application标签里添加引用:
<application ... android:networkSecurityConfig="@xml/network_security_config" ...>
3. 核对Fetch请求的参数细节
有时候iOS会自动处理一些请求细节,但Android不会:
- 确认请求的
Content-Type是否符合API要求,比如API需要application/json,一定要在headers里明确设置 - 检查自定义headers有没有特殊字符或者Android不支持的格式,比如某些大小写敏感的header字段
- 可以临时把Fetch换成
axios或者原生XMLHttpRequest测试,排查是不是Fetch在Android上的兼容性问题
4. 检查Android系统版本的SSL支持差异
不同Android版本对SSL协议的支持不一样:
- Android 7.0及以上默认不信任自签名证书,必须手动配置信任
- 如果你的服务器只支持TLS 1.0/1.1,而测试设备是Android 10+,系统默认禁用了这些旧协议,会导致握手失败,需要服务器升级到TLS 1.2+
5. 抓包分析实际请求
用Charles或者Wireshark抓包,搞清楚到底哪里出问题:
- 确认
AndroidManifest.xml里已经添加了网络权限:<uses-permission android:name="android.permission.INTERNET"/> - 如果请求没到服务器,可能是本地网络或者Android的网络限制问题
- 如果服务器返回了SSL握手错误,查看具体的错误码,比如证书不匹配、协议版本不兼容
内容的提问来源于stack exchange,提问作者Allloush
相关产品推荐
相关产品推荐

