You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo React Native应用APK构建后无法接收AWS EC2 API响应问题排查

可能的原因及解决方法

1. 缺少网络权限

  • 原因:Expo开发模式默认包含网络权限,但生产APK构建需要显式声明权限。
  • 解决:在项目根目录的app.json中,给android.permissions添加INTERNET权限:
    {
      "expo": {
        "android": {
          "permissions": ["INTERNET"]
        }
      }
    }
    

2. API地址使用本地环回地址

  • 原因:开发时若用localhost或127.0.0.1测试API,Expo隧道会转发请求到本地服务,但打包后的APK无法访问这些本地地址,EC2的API必须使用公网可访问的IP或域名。
  • 解决:将API基础URL替换为EC2实例的公网IP或已绑定的域名,先在手机浏览器中验证该地址能正常访问API接口。

3. EC2安全组/防火墙拦截请求

  • 原因:开发时你的本地IP可能在EC2安全组允许列表中,但手机使用的移动网络或其他WiFi的IP不在范围内,导致请求被拦截。
  • 解决:
    • 登录AWS控制台,进入EC2实例的安全组配置,添加入站规则,允许API服务对应的端口(如80/443)来自0.0.0.0/0(测试用,生产环境可限制更严格的IP段)。
    • 检查EC2实例内部的防火墙(如iptables),确保未阻止对应端口的入站请求。

4. 明文HTTP请求被Android限制

  • 原因:Android 9及以上版本默认禁止明文HTTP请求,开发模式下Expo会绕过此限制,但生产APK会严格执行,若EC2 API用HTTP协议,请求会被拒绝。
  • 解决:
    • 推荐方案:给EC2的API配置HTTPS证书(比如用Let's Encrypt免费证书),改用HTTPS请求。
    • 临时测试方案:在app.json中开启明文HTTP支持(不建议生产环境使用):
      {
        "expo": {
          "android": {
            "usesCleartextTraffic": true
          }
        }
      }
      

5. 环境变量未正确注入

  • 原因:开发时用.env文件存储API地址等环境变量,但打包时未将生产环境变量正确注入APK,导致请求地址错误。
  • 解决:
    • 使用EAS构建时,通过--env参数传递生产环境变量,或在eas.json的构建配置中定义环境变量。
    • 也可直接在app.json的expo.extra字段中配置生产环境API地址,代码中通过Constants.expoConfig.extra.apiUrl获取。

6. API服务器CORS配置限制

  • 原因:虽然React Native不严格遵循浏览器的CORS规则,但部分API服务器会限制请求来源,开发时Expo代理可能自动处理了CORS,打包后直接请求时被服务器拒绝。
  • 解决:修改EC2上API服务器的CORS配置,允许所有来源(*),React Native请求的Origin通常不固定,设为*即可满足需求。

内容的提问来源于stack exchange,提问作者Mohammd Ali Shaikh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 22:38:14