리액트 네이티브로 만든 안드로이드 어플리케이션에서 Rest 통신을 할 일이 생겼다.
다음과 같이 AndroidManifest.xml에서 Internet 퍼미션을 주고
<uses-permission android:name="android.permission.INTERNET" />
간단하게 fetch를 사용해서 요청하려고 했지만 Network Request failed 오류가 발생했다.
const getMessageFromApi = () => {
return fetch('http://127.0.0.1:5000/message', {method:'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body : JSON.stringify({message : dummyVal})
})
.then((response) => response.json())
.then((json) => {
alert(json.message)
return json.message})
.catch((error) => {
alert(error.message);
});
}
인터넷에 검색해보니, API 28버전부터는 안드로이드에서 보안상의 문제로 http 통신이 안된다는 것이었다.
그래서 https로 통신을 해야 하는데.. 간단하게 플라스크로 만든 서버를 고치는건 잘 모르겠어서, 우선은 안드로이드를 고쳐보기로 했다.
해결하기 위한 다양한 방법이 있다.
우선 모든 http 통신을 허용하는 방법으로 AndroidManifest.xml에서 application에 다음을 추가한다.
android:usesCleartextTraffic="true"
아니면 내가 사용하는 특정 주소에서만 http 통신을 허용하는 방법도 있다.
res/xml/netwrok_security_config.xml을 만들어 다음 코드를 추가한다.
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">원하는 주소!!!!!</domain>
</domain-config>
</network-security-config>
그리고 AndroidManifest.xml에 다음과 같이 xml 파일을 등록해준다.
<application
...
android:networkSecurityConfig="@xml/network_security_config"
...>
</application>
아니면 targetSandboxVersion을 1로 수정하는 방법도 있다고 한다.
<?xml version="1.0" encoding="utf-8"?>
<manifest android:targetSandboxVersion="1">
<uses-permission android:name="android.permission.INTERNET" />
...
</manifest>
나는 이중 첫 번째 방법을 사용했지만 그래도 에러가 발생한다.
StackOverflow를 찾아보니, 안드로이드를 AVD를 통해 사용하는 경우, Localhost의 주소를 10.0.2.2로 바꿔줘야 한다는 것이었다...
'http://127.0.0.1:5000/message' -> 'http://10.0.2.2:5000/message'
전문가가 아니라 정확하지 않은 지식이 담겨있을 수 있습니다.
언제든지 댓글로 의견을 남겨주세요!
'코딩 > 안드로이드' 카테고리의 다른 글
안드로이드 이메일, 비밀번호 입력 폼 (머테리얼 디자인) [Android, JAVA] (1) | 2022.03.12 |
---|---|
안드로이드 트리 구조 리사이클러뷰 구현 (접었다 폈다) [Android, JAVA] (2) | 2022.02.19 |
안드로이드 Daum 주소 검색 API 활용하기 [Android] (6) | 2022.02.18 |
JetPack 직전 DialogFragment 값 받아오기 (BackStackEntry, SavedStateHandle) [Android (0) | 2022.02.11 |
RecyclerView 아이템 클릭 이벤트 구현 [Android, JAVA] (4) | 2022.01.29 |
Comment