Проблема: HTTP-запросы не работают в собранном APK

    У меня есть приложение на Expo, которое отправляет HTTP-запросы на сервер Flask, работающий в локальной сети. Я использую IP-адрес компьютера (например, 192.168.29.1), а не localhost. В режиме разработки с Expo всё работает нормально, но после сборки APK и установки на устройство приложение не может подключиться к серверу.

    Код отправки данных

    Вот используемый код:

    const handleSendData = async () => {
        if (!photo || !selectedCategory || !photoHeading || !photoLocation) {
          alert('Пожалуйста, убедитесь, что все данные доступны перед отправкой.');
          return;
        }
    
        try {
          const base64Response = await fetch(photo);
          const blob = await base64Response.blob();
          const reader = new FileReader();
          reader.readAsDataURL(blob);
          reader.onloadend = async () => {
            const base64data = reader.result;
    
            const data = {
              category: selectedCategory,
              heading: photoHeading,
              latitude: photoLocation.latitude,
              longitude: photoLocation.longitude,
              photo: base64data,
            };
    
            const response = await fetch(`http://${serverIp}/detect`, {
              method: 'POST',
              headers: {
                'Content-Type': 'application/json',
              },
              body: JSON.stringify(data),
            });
    
            if (response.ok) {
              const result = await response.json();
              alert('Данные успешно отправлены!');
              console.log('Server response:', result);
            } else {
              alert('Ошибка при отправке данных.');
              console.error('Server error:', response.status);
            }
          };
        } catch (error) {
          console.error('Ошибка при отправке данных:', error);
          alert('Произошла ошибка при отправке данных.');
        }
      };

    Условия

    • Компьютер и телефон находятся в одной сети (через точку доступа телефона).
    • IP-адрес компьютера указан правильно.

    Конфигурация app.json

    Вот содержимое файла app.json. Возможно, проблема в нём:

    {
      "expo": {
        "name": "radar-app",
        "slug": "radar-app",
        "version": "1.0.0",
        "orientation": "portrait",
        "icon": "./assets/icon.png",
        "userInterfaceStyle": "light",
        "newArchEnabled": true,
        "splash": {
          "image": "./assets/splash-icon.png",
          "resizeMode": "contain",
          "backgroundColor": "#ffffff"
        },
        "ios": {
          "supportsTablet": true
        },
        "android": {
          "adaptiveIcon": {
            "foregroundImage": "./assets/adaptive-icon.png",
            "backgroundColor": "#ffffff"
          },
          "package": "com.matrik_by.radarapp",
          "permissions": [
            "INTERNET",
            "ACCESS_FINE_LOCATION",
            "CAMERA",
            "READ_EXTERNAL_STORAGE",
            "WRITE_EXTERNAL_STORAGE"
          ],
          "usesCleartextTraffic": true
        },
        "web": {
          "favicon": "./assets/favicon.png"
        },
        "extra": {
          "eas": {
            "projectId": "fcf2c3f0-a450-4002-b7b2-b710aa5c10ce"
          }
        }
      }
    }

    Основная проблема - при сборке APK запросы на небезопасный HTTP могут блокироваться политикой безопасности Android. Решение: убедитесь, что в app.json в разделе android включена опция usesCleartextTraffic (уже есть со значением true). Если проблема сохраняется, проверьте настройки сети и брандмауэра на компьютере, а также рассмотрите использование network_security_config.xml для явного разрешения трафика на ваш IP-адрес.