React Native Android端无法访问HTTPS接口问题排查
排查步骤与可能原因
1. Android 基础网络配置校验
- 确认
AndroidManifest.xml中已添加网络权限:<uses-permission android:name="android.permission.INTERNET" />;若使用Expo,需检查app.json/expo.json的android.permissions是否包含INTERNET。 - 针对Android 9+(API 28及以上),测试临时放宽SSL信任限制(仅用于排查,禁止上线):
在res/xml/network_security_config.xml中添加配置:
再在<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" /> <certificates src="user" /> </trust-anchors> </base-config> </network-security-config>AndroidManifest.xml的application标签中关联该配置:android:networkSecurityConfig="@xml/network_security_config",观察问题是否消失。
2. SSL证书钉扎与代理冲突验证
开启Charles SSL代理后全端连接挂起,大概率是目标API服务器启用了**证书钉扎(Certificate Pinning)**机制,拒绝了Charles的代理证书。这也可能解释Android端的原始问题:若API的证书链在Android系统信任列表中不完整,而iOS/浏览器能自动补全证书链,就会出现跨平台差异。
- 直接在Android设备的系统浏览器中访问该API URL,若也报错,说明是系统信任链问题;若能访问,则问题出在RN的请求配置上。
3. Fetch请求配置差异调整
iOS与Android的Fetch实现存在细微差异,尝试以下调整:
- 添加User-Agent头,部分服务器会拒绝无标识的请求:
fetch(apiUrl, { headers: { 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; SM-G973F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.105 Mobile Safari/537.36' } }) - 手动编码URL中的查询参数,使用
encodeURIComponent处理每个参数后再拼接,避免Android端对特殊字符的解析异常。
4. Expo环境特定问题排查
- 检查Expo SDK版本,部分旧版本存在Android网络请求bug,尝试升级至最新稳定版。
- 分别在Expo Go和打包后的APK中测试,二者的网络配置可能存在差异。
5. 服务器端访问限制排查
- 切换Android设备的网络环境(WiFi/移动数据),排除地域IP限制。
- 对比iOS与Android端的请求IP,确认是否存在服务器的IP段拦截规则。
内容的提问来源于stack exchange,提问作者Esben von Buchwald
相关产品推荐
相关产品推荐

