You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Expo构建的APK安装后抛出“Network request failed”错误的排查求助

Expo构建的APK安装后抛出“Network request failed”错误的排查求助

我正在做一个个人应用,通过运行在Flask上的服务器来控制家里的设备。我已经完成了应用开发,用Expo扫码加载到手机上时一切正常——请求能发送到服务器,所有功能都没问题。但用Expo EAS构建APK安装到手机后,就彻底失效了,只会抛出Network request failed的错误,完全没有其他提示来帮我定位问题。

我猜测可能是Android阻止了HTTP请求,因为我的服务器是架在家里树莓派上的,本来就没打算折腾证书的事。查了一阵子资料后,我修改了app.json(已经去掉了隐私相关内容),但问题还是没解决:

{
  "expo": {
    "name": "",
    "slug": "",
    "version": "1.0.0",
    "orientation": "portrait",
    "icon": "./assets/icon.png",
    "userInterfaceStyle": "light",
    "newArchEnabled": true,
    "splash": {
      "image": "./assets/splash-icon.png",
      "resizeMode": "contain",
      "backgroundColor": "#000000"
    },
    "ios": {
      "supportsTablet": true
    },
    "android": {
      "adaptiveIcon": {
        "foregroundImage": "./assets/icon.png",
        "backgroundColor": "#000000"
      },
      "usesCleartextTraffic": true,
      "package": "",
      "permissions": ["INTERNET"]
    },
    "web": {
      "favicon": "./assets/favicon.png"
    },
    "extra": {
      "eas": {
        "projectId": ""
      }
    }
  }
}

我用HTTP请求快捷方式APP测试过,确认Android应用确实能连上我的服务器,而且Expo测试版里应用能正常工作,说明我没搞错fetch的用法(我没装任何第三方库,用的就是React原生的fetch)。

我到底漏掉了什么?我试过参照相关方案安装了某个库,但那直接搞崩了我的项目——连扫码测试都加载不了,只能构建APK安装,但就算那样还是报错。除了这个app.json,我没改过其他Expo默认文件,只写了自己的业务代码。

另外附上我处理请求的代码:

const togglePlay = async () => {
    try {
      const response = await fetch(`${apiUrl}toggle`);
      const json = await response.json();

      handleToast(json);
      if (json.status) {
        setIsAnimating((prev) => json.state);
      }
    } catch (error) {
      Toast.show({
        type: 'error',
        text1: 'Error',
        text2: error.message,
      });
      handleError(error);
    }
  };

备注:内容来源于stack exchange,提问作者Efraín

火山引擎 最新活动