React Native Android生产环境TypeError: Network request failed问题求助
解决Google Play生产版Android应用Fetch调用API失败的问题
针对你遇到的仅Google Play生产版Android应用出现TypeError: Network request failed、请求未到达服务器的问题,可按以下步骤排查:
检查Android网络安全配置
Google Play生产版应用受Android网络安全策略约束:- 若API使用HTTP协议,需在
res/xml/network_security_config.xml中配置允许该域名的明文流量,同时在AndroidManifest.xml的<application>标签添加android:networkSecurityConfig="@xml/network_security_config"; - 若使用HTTPS,确认服务器证书是Android系统信任的CA颁发的,自签名证书在生产版会被拦截,需将证书添加到应用的信任列表。
- 若API使用HTTP协议,需在
验证生产版构建的混淆与配置
- 检查ProGuard/R8混淆规则,确保OkHttp、Fetch相关类未被混淆,可在
proguard-rules.pro添加:-keep class okhttp3.** { *; } -keep class okio.** { *; } -keep class com.facebook.react.modules.network.** { *; } - 确认
build.gradle中生产版的API域名配置正确,避免开发环境变量被带入生产包。
- 检查ProGuard/R8混淆规则,确保OkHttp、Fetch相关类未被混淆,可在
检查Google Play应用签名与权限
- 确认
AndroidManifest.xml中已添加<uses-permission android:name="android.permission.INTERNET" />,生产版不会自动默认添加该权限; - 若启用了Google Play App Signing,检查是否因签名变更触发SafetyNet或App Integrity限制,导致网络请求被拦截,可在Google Play Console查看应用完整性报告。
- 确认
抓包分析生产环境网络请求
用生产版APK在用户的网络环境下抓包(如Charles),确认:- DNS解析是否成功,是否指向正确的API服务器;
- 请求是否发出,是否被本地网络、运营商或防火墙拦截;
- 连接阶段是否出现TLS握手失败等错误。
排查Fetch请求的环境差异
- 核对生产版应用的请求URL、请求头(如
Content-Type、User-Agent)是否与开发版一致,避免环境变量配置错误导致请求地址无效; - 确认POST请求的body格式是否符合API要求,生产版是否存在数据序列化错误导致请求无法正常发送。
- 核对生产版应用的请求URL、请求头(如
检查Android系统版本兼容性
若问题集中在旧Android版本(如Android 7及以下),确认API服务器的TLS配置兼容TLS 1.2(旧系统默认不支持TLS 1.3),可调整服务器的SSL/TLS协议版本。
内容的提问来源于stack exchange,提问作者Roy Duinkerken
相关产品推荐
相关产品推荐

