React Native сборка не отправляет запрос на http сервер
Всем привет! Я использую в своей разработке Expo. При отправке запросов, сначала использовал fetch, теперь перешел на axios (я думал, что проблема таким образом решится). Во время разработки всё работает: запросы отправляются на сервер, я получаю ответы с сервера, всё замечательно и прекрасно. Когда я собираю свое приложение в .apk и тестирую приложение на своем телефоне, то при отправке запроса, получаю ошибку AxiosError: Network Error. Вот так выглядит запрос к серверу (в целях безопасности, скрыл адрес буквой x):
await axios.post('http://xx.xxx.xxx.xxx:3000/api/reg', reg_data, {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json; charset=utf-8',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': 'Content-Type,Authorization',
'Access-Control-Allow-Methods': 'GET,PUT,POST,DELETE,OPTIONS'
}
})
.then(async(response) => {
result = {id: response.data.id, error: false}
})
.catch(async error => {
result = {id: false, error}
})
Проверял через Postman, тоже всё работает. Сервер на express.js. Если информации недостаточно, напишите в комментарии, всё покажу. Помогите мне, пожалуйста.
Ответы (1 шт):
Вкратце: http нужно поменять на https. И в backend тоже сделать https.
В Android и в IOS открытый трафик блокируется. То есть в запросах к API вместо http нужно использовать https.
Либо отключить эту настройку в AndroidManifest
переходим в android/app/src/main/AndroidManifest
устанавливает такие настройки:
<application
...
android:usesCleartextTraffic='true'
...
>
Обратите внимание на путь к манифесту, потому что часто эти настройки меняют в папке - debug. Такой вариант работает только на локальной версии. Именно поэтому у вас на локалке всё работает, а в 'боевой' не работает.