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 шт):

Автор решения: r2d2

Вкратце: http нужно поменять на https. И в backend тоже сделать https.

В Android и в IOS открытый трафик блокируется. То есть в запросах к API вместо http нужно использовать https.

Либо отключить эту настройку в AndroidManifest

переходим в android/app/src/main/AndroidManifest устанавливает такие настройки:

<application
    ...
    android:usesCleartextTraffic='true'
    ...
>

Обратите внимание на путь к манифесту, потому что часто эти настройки меняют в папке - debug. Такой вариант работает только на локальной версии. Именно поэтому у вас на локалке всё работает, а в 'боевой' не работает.

→ Ссылка