Это приложение во время отладки с помощью эмулятора телефона через Android Studio и отправка моего запроса работает. Это также работает через Postman. Это также работает, когда я запускаю приложение API Tester (похожее на почтальон для мобильных устройств) на своем физическом устройстве. Все это возвращает мне токен.
Проблема заключается в том, что я создаю версию приложения и устанавливаю ее на свой телефон, который также подключен к той же сети, и я помещаю в IP-адресе компьютера, на котором запущена служба docker keycloack. Допустим, локальный IP-адрес моего компьютера — 192.168.1.150, а порт, на котором запущен экземпляр Docker, — 8080.
Вот фрагмент кода того, как я пытаюсь выполнить запрос на выборку POST для служба Docker Keycloak.
`
const loginHandler = async () => {
const url = http://192.168. 1.150:8080/realms/testrealm/protocol/openid-connect/token;
const body = client_id=login-client&client_secret=SOME+RANDOM+CHARS&username=${encodeURIComponent(username)}&password=${ encodeURIComponent(пароль)}&grant_type=пароль;
Код: Выделить всё
const timeoutPromise = new Promise((_, reject) =>
setTimeout(() => reject(new Error('Request timed out')), 15000)
);
try {
setMessage('');
console.log('Perform login with:', username, password);
console.log('URL FOR LOGGING:', url);
console.log('BODY OF URL:', body);
const fetchPromise = fetch(url, {
method: 'POST',
mode: 'cors',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: body,
});
const response = await Promise.race([fetchPromise, timeoutPromise]);
console.log('Response Status:', response.status);
if (!response.ok) {
const responseBody = await response.text();
console.log("LOGIN FAILED", response.status, responseBody);
setMessage(`Login failed with status ${response.status}: ${responseBody}`);
setMessageColor('red');
throw new Error(`Login failed | "LOGIN FAILED", ${response.status}, ${responseBody}, URL: ${url}`);
}
const data = await response.json();
console.log('Login successful!:', data);
setMessage('Login successful!');
setMessageColor('green');
} catch (error) {
console.error('Login error:', error);
setMessage(`Login error: ${error.message}`);
setMessageColor('red');
}
`
Попробовал перейти к AndroidManifest.xml и установить android:usesCleartextTraffic="true" "
Настройка режима выборки для cors
Подключение физического телефона к ПК через USB-C и использование его в качестве устройства отладки для запуска теста приложение, но все еще не удалось получить сетевой запрос.
Подробнее здесь: https://stackoverflow.com/questions/786 ... est-failed
Мобильная версия