본문 바로가기

MOBILE/android

[오류 일기] 안드로이드 http 프로토콜 접속 오류: Cleartext HTTP traffic to __ not permitted

천문현상정보 API 받아오는데 IOException catch가 발생한다... 왜? 대체 왜... 파싱도 제대로 한 것 같은데 why??

그래서 찾다가 구글에서 제공하는 안드로이드 개발 문서를 보게 되었음

네트워크 보안 구성  |  Android 개발자  |  Android Developers

 

 

안드로이드 9 (PIE) 부터는 HTTP 트래픽을 차단하고 HTTPS만 허용하도록 정책이 바뀜

그리고 난 그걸 이제서야 알았고...

자세히 읽어보면 일반 텍스트 지원 기능을 해제해서 HTTP 연결을 차단할 수 있다는데 반대로 생각하면 이걸 허용해서 HTTP 연결을 사용할 수도 있다는 거임

 

해결하자

 

1. AndroidManifest.xml 파일에 usesCleartextTraffic 속성을 true로 하면 모든 HTTP 연결을 허용함

 

2. 특정 도메인만 HTTP 연결을 허용

이렇게 특정 도메인을 res/xml/network_security_config.xml 에 추가하고 <network-security-config> 태그 안에  <domain-config cleartextTrafficPermitted="true or false"> 이 속성을 추가해주면

이 도메인은 항상 HTTPS (false 인 경우) 또는 HTTP (true 인 경우) 연결을 하도록 해줌