Сценарий таков:
-Настройте службу области Docker Keycloak для проверки некоторой аутентификации, чтобы выдать токен при аутентификации
-при запуске виртуального устройства (виртуального телефона) с помощью Android Studio я могу пройти аутентификацию и получить токен обратно от службы docker keycloak. Также протестировано с помощью Postman, и я также получаю токен.
-Когда я создаю APK через ./gradlew assembleRelease в папке Android и устанавливаю его на свое устройство, я всегда получаю ошибку «Ошибка запроса сети».
– Если я подключу свой телефон и использую его для отладки приложения при подключении к ПК, я все равно получаю сообщение «Ошибка запроса сети».
— Итак, я отправляю запрос с использованием HTTP вместо HTTPS, и я обязательно зашел в AndroidManifest.xml и установил
-Раньше, когда я использовал локальный 192.168.etc...:8080, сетевой запрос мгновенно завершался неудачно. Теперь, если я использую 10.0.2.2, он ждет около 7-10 секунд, прежде чем я получу сообщение об ошибке запроса сети.
Спасибо всем за помощь. Здесь я уперся в кирпичную стену и не знаком с сетью или подключением.
Вот сегмент кода для моего обработчика входа в систему
//- -------------------------------------------------- ----------
Код: Выделить всё
const loginHandler = async () => {
const url = `http://10.0.2.2:8080/realms/testrealm/protocol/openid-connect/token`;
const body = `client_id=login-client&client_secret=SOME+RANDOM+CHARS&username=${encodeURIComponent(username)}&password=${encodeURIComponent(password)}&grant_type=password`;
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"
- Изменение локального IP-адреса адрес 10.0.2.2 вместо 192.168.etc...
-Использование моего физического телефонного устройства для отладки и
Подробнее здесь: https://stackoverflow.com/questions/786 ... cal-device