Expo EAS构建的安卓生产包仅登录功能可用,无法正常获取HTTP API数据
Expo EAS构建的安卓生产包仅登录功能可用,无法正常获取HTTP API数据
我之前也踩过类似的坑,结合你描述的情况,给你梳理几个大概率的原因和实用的调试方向:
认证状态持久化的坑:开发环境和EAS生产构建的存储机制可能有隐性差异,比如你用AsyncStorage存登录token,在生产包中会不会出现写入成功但读取失败的情况?登录能成功说明首次请求没问题,但后续获取事件的请求大概率需要带上token鉴权,如果生产环境下token没正确读取到,后端就会返回无权限,而你前端没处理这个错误,就直接显示“no events”了。建议在生产包中临时加个日志(比如用Alert弹窗,或者把token读取结果存在本地存储),确认后续请求的请求头里是否携带了正确的Authorization token。
请求链路的细节差异:虽然登录接口能用,但后续接口的请求可能藏着问题:
- 检查baseUrl拼接的完整请求地址,会不会在生产构建时因为代码压缩或者配置问题,接口路径被拼错了?比如开发时是
http://api.myserver.com/api/events,生产时变成了http://api.myserver.com/events? - 有些请求库(比如axios)在生产模式下会默认启用缓存策略,导致请求被缓存返回空数据;或者请求头的Content-Type等参数和开发环境不一致,被后端拒绝处理。
- 检查baseUrl拼接的完整请求地址,会不会在生产构建时因为代码压缩或者配置问题,接口路径被拼错了?比如开发时是
代码压缩与构建优化的影响:EAS生产构建默认会开启代码混淆和Tree Shaking,会不会不小心把请求拦截器、错误处理逻辑这类代码给优化掉了?比如你写的axios拦截器在生产环境没正确注册,导致后续请求没带上必要的头信息。
后端的隐性校验规则:可以让后端同事帮忙查一下服务器日志,看看你生产包的后续请求有没有到达后端,返回的状态码是什么(比如403、401、500)。有些后端会对非登录接口做额外校验,比如User-Agent限制、请求频率限制,这些在开发环境可能没触发,但生产环境就会拦截请求。
实用调试方法
- 先构建一个开发环境的包:
eas build -p android --profile development,在真机上安装后打开远程调试(用Chrome DevTools或者Expo DevTools),查看Network面板里的请求状态,直接看后续请求有没有报错、参数是否正确。 - 如果没法远程调试,就把请求的完整URL、请求头、响应结果都存在本地存储里,之后用Expo的FileSystem工具把日志导出来分析。
- 检查你的错误处理逻辑,是不是在生产环境下错误被吞掉了?比如catch块里没有任何提示,导致你不知道请求失败,只看到“no events”的默认提示。
内容来源于stack exchange
相关产品推荐
相关产品推荐

