Expo React Native应用生产环境Fetch API失效,开发环境正常
React Native Expo生产APK网络请求问题排查与解决
问题背景
开发的React Native Expo应用在开发环境(安卓设备通过Expo Go连接开发服务器)运行正常,但使用eas build打包生产APK后,Fetch API完全无法工作。登录时界面卡在加载状态,既无成功反馈也无错误提示,服务器日志甚至没有收到请求记录。开发模拟器中Fetch曾报“Network Request Failed”,但Expo Go模式下正常。API地址为https://api.deardiary.tech/,SSL证书无问题。
登录核心代码:
const login = async () => { try{ setLoading(true); const res = await fetch(`${BASE_URI}/login`, { method : 'POST', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, credentials : 'include', body : JSON.stringify({ name, password }) }); const data = await res.json(); if(data.success === true){ await AsyncStorage.setItem('name', name); setLoading(false); navigation.navigate('/', {state : data.data}); } else{ setLoading(false); alert(data.message); } } catch(e){ alert(e.response.data.message); setLoading(false); } }
一、安卓手机端设置调整
- 开启网络访问权限:进入手机「设置」→「应用管理」→ 找到你的应用 →「权限管理」,确保「移动网络」和「WLAN」权限已开启。
- 关闭VPN/代理服务:如果手机正在使用VPN或代理,可能会阻断应用的网络请求,关闭后重试。
- 禁用省流量模式:部分手机的省流量模式会限制应用网络访问,进入「设置」→「网络和互联网」→「流量节省」,关闭该功能或把应用加入白名单。
- 解除后台联网限制:部分定制安卓系统(如MIUI、ColorOS)会限制应用后台联网,在应用权限设置中找到「后台联网权限」并开启。
二、代码与配置修复(关键)
- 修复错误捕获逻辑:当前catch块直接访问
e.response.data.message,若请求未发出(纯网络错误),e.response为undefined,会导致代码卡死,无法执行setLoading(false),这才是界面卡在加载的核心原因。修改为:
catch(e){ alert(e.message || '网络请求失败'); setLoading(false); }
- 确认安卓权限配置:在
app.json的android.permissions中添加网络权限,Expo生产构建需要明确声明:
"android": { "permissions": [ "INTERNET", "ACCESS_NETWORK_STATE" ] }
- 测试凭证配置兼容性:暂时移除
credentials: 'include'后测试请求是否正常,若正常,需确保服务器配置了Access-Control-Allow-Credentials: true和正确的Access-Control-Allow-Origin(不能用通配符*)。
内容的提问来源于stack exchange,提问作者Deepak Sangle
相关产品推荐
相关产品推荐

