React Native fetch请求在安卓上总是失败怎么办?

东方文君 阅读 14

我在安卓真机测试时,用fetch('https://api.example.com/data')请求老是报错“Network request failed”,iOS模拟器却能正常获取数据。已经试过加credentials: 'include'和检查AndroidManifest.xml里的互联网权限,还是不行。

代码是这样的:


try {
  const response = await fetch(url);
  return await response.json();
} catch (error) {
  console.error('请求失败:', error);
}

日志只显示网络错误,抓包工具也看不到请求发出,是不是安卓有特殊配置?

我来解答 赞 5 收藏
二维码
手机扫码查看
1 条解答
Dev · 锦玉
这个问题八成是安卓的网络安全配置问题。从 Android 9(Pie)开始,默认不允许明文 HTTP 请求,但其实 HTTPS 在某些情况下也会被拦截,尤其是调试时用了自签名证书或者本地代理。

你虽然加了互联网权限,但还得检查一下 android/app/src/main/res/xml/network_security_config.xml 文件有没有配置信任你的域名或允许明文流量。

先在 android/app/src/main/AndroidManifest.xmlapplication 标签里加上:

<application
...
android:networkSecurityConfig="@xml/network_security_config">


然后在 res/xml 目录下创建 network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">api.example.com</domain>
</domain-config>
</network-security-config>


这样至少能先跑通。线上环境记得关掉 cleartextTrafficPermitted,只保留必要的域名。

另外 fetch 可以优化成更健壮一点的写法,避免因为默认配置导致跨域或 cookie 问题:

const response = await fetch(url, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
credentials: 'include', // 如果需要携带 cookie
});


最后,真机测试时别忘了时间同步问题,系统时间不准也会导致 HTTPS 握手失败,我就踩过这坑。抓不到包很可能请求根本没发出去,先确保网络层放行再说。
点赞 6
2026-02-11 00:08