-
[안드로이드 9.0 프로토콜 접속 변경사항] CLEARTEXT communication to XXXX not permitted by network security policyAndroid 2020. 7. 24. 00:40
개요
얼마전 국방부 공모전을 나가기 위해 제작한 군인 커뮤니티 플랫폼 서비스인 군머니티를 제작하던 중 예기치 못한 오류가 발생했습니다.
테스트 기기에서는 정상적으로 실행되던 앱이 다른 특정 유저들에게선 버튼 클릭이나 전체적인 앱 실행이 안되는 현상이 발생하는 것이었죠. 급하게 버그를 수정하기 위해 원인을 찾고 있었으나, 저의 테스트 기기에선 방법을 찾을 수 없었습니다. 알고보니, 제 테스트 기기들은 OS 9.0보다 아래였기 때문에 에러가 생기지 않았던 것인데요.
애뮬레이터에서 OS 9.0을 가진 기기를 생성하고 실행했을 때 다음과 같은 에러 문구를 발견할 수 있었습니다.
CLEARTEXT communication to XXXX not permitted by network security policy
처음보는 에러문구에 굉장히 당황했지만 검색해보니 바로 문제를 찾을 수 있었습니다.
안드로이드 OS 9.0 Pie부터 네트워크 보안 정책을 변경해서 발생한 문제였는데요. 모든 네트워크 트래픽에서 http 대신 https를 사용하도록 강제하는 정책입니다. http연결은 명시적으로 사용을 선언한 경우에만 사용할 수 있게 됩니다.
해결방법
방법1. AndroidManifest에서 android:usesCleartextTraffic의 Flag값을 True로 변경해줍니다
HTTP는 암호화 되지않은 ClearText(평문), HTTPS는 암호화 된 CipherText(암호문)입니다. 매니페스트 파일에서 다음과 같이 android:usesCleartextTraffic = 'true'로 바꿔주면 HTTP를 사용할 수 있습니다.
<application ... android:usesCleartextTraffic="true" />
방법2. networkSecurityConfig 파일을 AndroidManifest에 등록합니다.
res / xml / network_security_config.xml 파일을 생성하고 해당 파일에 다음과 같이 작성합니다.
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config>
방법1과 마찬가지로 어플리케이션 내에서 clearText의 사용을 허가한다는 것입니다. 파일만 생성하고 끝나는 것이 아니라 AndroidManifest파일에 다시 한번 등록해줍니다.
<application ... android:networkSecurityConfig="@xml/network_security_config" />
'Android' 카테고리의 다른 글
변수의 동시성 제어에 관한 이슈 및 해결 (1) 2020.10.27 Gson을 통해 API Response를 Enum으로 매핑하기 (0) 2020.09.25 SharedPreference 이야기 (0) 2020.06.19 EditText 자동 포커스 기능 막기 (0) 2020.05.25 프래그먼트와 백스택, 그리고 엑티비티 (0) 2020.05.20