React Native打包release模式后无法获取HTTP服务器数据如何解决
React Native Release包无法访问HTTP接口修复方案
该问题核心原因是debug模式下React Native默认对调试环境做了网络安全豁免,release包会严格遵守系统默认网络安全规则,默认禁止未加密的HTTP明文请求,按以下对应平台步骤修复即可:
Android端修复
- 首先确认网络权限配置:打开
android/app/src/main/AndroidManifest.xml,在根<manifest>节点下确认已声明网络权限,不要把该权限写到debug专属的manifest文件中,避免release包缺失权限:
<uses-permission android:name="android.permission.INTERNET" />
- 配置明文访问权限,两种方案二选一即可:
- 快速测试方案(适合内部测试包):在
<application>标签上添加android:usesCleartextTraffic="true"属性,全局允许明文HTTP请求:
<application android:name=".MainApplication" android:usesCleartextTraffic="true" ...其他属性 >- 生产环境推荐方案(仅对目标接口开放明文权限,合规性更高):
- 在
android/app/src/main/res/xml/目录下新建network_security_config.xml文件,写入以下配置:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">12.129.302.253</domain> <domain includeSubdomains="true">localhost</domain> </domain-config> </network-security-config>- 回到
AndroidManifest.xml的<application>标签,添加属性关联上述配置文件:
<application android:name=".MainApplication" android:networkSecurityConfig="@xml/network_security_config" ...其他属性 > - 在
- 快速测试方案(适合内部测试包):在
- 检查混淆规则:如果开启了ProGuard/R8代码混淆,打开
android/app/proguard-rules.pro,添加所用网络库的keep规则,避免release包混淆时将网络请求相关类错误裁剪,以常用的OkHttp为例:
-keep class okhttp3.** { *; } -keep interface okhttp3.** { *; } -dontwarn okhttp3.**
如果使用其他第三方网络库,补充对应库的官方混淆规则即可。
iOS端修复
iOS系统默认通过ATS(App Transport Security)策略禁止HTTP明文请求,需要在ios/项目名/Info.plist中添加对应配置,两种方案二选一:
- 快速测试方案:全局放开ATS限制,允许所有HTTP请求:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
注意:该配置提交App Store审核时大概率会被驳回,仅适合本地测试使用。
- 生产环境推荐方案:仅对目标接口地址放开明文限制:
<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>12.129.302.253</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.1</string> </dict> </dict> </dict>
其他必查项
- 核对接口地址合法性:你提供的IP
12.129.302.253第三段地址为302,超出IPv4地址单段0-255的合法取值范围,先确认实际服务IP是否输入错误。 - 检查服务端访问限制:确认运行release包的设备网络可以正常访问服务端9005端口,排除服务端防火墙拦截、端口未对外开放、IP白名单限制等问题。
- 检查请求配置:确认请求代码中没有写死debug环境专属的代理地址、调试域名,release环境已切换到正确的服务端地址。
内容的提问来源于stack exchange,提问作者dev-arjun
相关产品推荐
相关产品推荐

