Проблема: 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-адрес.