真机“network request failed”主因是平台安全策略:ios需配置info.plist中nsapptransportsecurity允许http;android 9+需在androidmanifest.xml中设android:usescleartexttraffic="true";并确认真机网络可达目标地址。

如果您在React Native项目中使用fetch发起网络请求,在模拟器中正常,但部署到iOS或Android真机后出现“Network request failed”错误,则很可能是由于平台安全策略、网络环境差异或请求配置不兼容所致。以下是针对真机环境的调试步骤:
一、检查真机网络连通性与目标地址可达性
真机可能处于与开发机不同的网络环境(如公司内网、移动数据、Wi-Fi隔离),导致无法访问本地服务器或特定公网IP。需确认设备能否直接访问请求URL。
1、在真机浏览器中手动输入请求的完整URL(例如 http://192.168.1.100:3000/api/login),观察是否能返回预期JSON或HTML响应。
2、若为局域网地址(如192.168.x.x、10.x.x.x),确认真机与服务器在同一子网,且防火墙未拦截端口。
3、若为公网HTTP地址,注意iOS默认禁止非HTTPS请求;Android 9+也对明文HTTP流量施加限制。
二、验证iOS真机的App Transport Security配置
iOS真机强制执行ATS(App Transport Security)策略,未配置例外时会直接拒绝所有HTTP请求,不触发任何详细错误日志,仅报“Network request failed”。
1、打开iOS项目根目录下的 ios/YourApp/Info.plist 文件。
2、确保已添加以下字典结构(支持Xcode 12及以上版本的键名映射):
3、在
4、若仅需允许本地开发服务,补充
三、排查Android真机的Cleartext Traffic限制
Android 9(API 28)起默认禁止应用使用明文HTTP流量,除非显式声明允许,否则fetch会静默失败。
Orderly React SDK 钩子使用参考指南,包括 useOrderEntry、usePositionStream、useOrderbookStream、useCollateral 等。
1、打开 android/app/src/main/AndroidManifest.xml 文件。
2、在
3、若仅需对特定域名开放,需配合 res/xml/network_security_config.xml 文件定义细粒度规则,并在
四、捕获并输出底层网络错误详情
React Native的fetch错误对象在真机上常为空或仅含模糊字符串,需绕过fetch封装,使用原生调试手段定位根本原因。
1、在JS层fetch调用处包裹try-catch,并打印完整error对象:console.log('Fetch error:', JSON.stringify(error))。
2、在iOS真机上连接Xcode,运行App,查看控制台中是否有 NSURLSessionTask finished with error 类似原生日志。
3、在Android真机上使用 adb logcat *:S ReactNative:V ReactNativeJS:V 捕获JS层与原生层交互日志。
五、替换fetch为原生模块或axios进行交叉验证
部分RN版本存在fetch实现缺陷(尤其涉及重定向、cookie或自定义header时),可临时改用其他网络库排除fetch自身问题。
1、安装axios:npm install axios 或 yarn add axios。
2、替换原fetch调用为axios.post()或axios.get(),保持相同URL、headers与body结构。
3、若axios成功而fetch失败,说明问题出在RN内置fetch的polyfill或原生桥接逻辑中,需检查RN版本兼容性或升级。










