박상권의 삽질블로그

[안드로이드]CLEARTEXT communication to XXXX not permitted by network security policy 본문

IT/Android-TIP (한글)

[안드로이드]CLEARTEXT communication to XXXX not permitted by network security policy

박상권 2018.12.09 20:39



"CLEARTEXT communication to XXXX not permitted by network security policy"


어느날 코드를 바꾼게 없는데도 위와 같은 오류가 발생하면서 앱이 실행이 안되는 일이 발생합니다.

그 이유는 여러분 혹은 사용자폰의 OS가 안드로이드 9.0 파이(Pie)이기 때문입니다.

그리고 여러분이 사용하는 API주소, 이미지주소 등 네트워크 경로가 https가 아닌 http로 되어 있기 때문입니다.


안드로이드 9.0 파이에서는 https를 사용하도록 강제합니다.

주소가 http인경우 위와같은 에러메세지가 발생하게 됩니다.

Protecting users with TLS by default in Android P


그외 안드로이드 9.0 파이에서 추가/변경된 내용 살펴보기



2018.12.09 기준으로 아직 안드로이드 9.0 파이버전이 정식배포되지 않아서 이 오류를 발견하신분들은 많지 않을것입니다.

지금까지 우리는 마시멜로우, 오레오 등으로 OS를 업데이트할때마다 여러 이슈들에 맞닥뜨린 경험이 많았습니다.

그래서 저는 파이버전이 미리 배포되기전에 직접 제 폰을 업데이트해서 앞으로 발생할 이슈가 없는지 체크해보았습니다.

(삼성 멤버스앱에서 베타 프로그램에 가입하면 파이버전으로 업데이트해서 테스트해볼 수 있습니다.)




해결방법1

아주 간단합니다.

현재 앱안에서 사용중인 네트워크 주소를 http -> https 로 변경하세요.

그럼 더이상 바꿀 코드가 없습니다.



해결방법2

물론 1번 방법으로 간단하게 변경할 수 없는 경우가 있습니다.

서버에서 아직 https로 구성되어 있지 않은경우에는 어쩔수없이 http로 사용해야합니다.


그럴때는 해당 서버주소를 http여도 실행되도록 허용해주도록 설정해줍니다.

res/xml 에 아래와 같은 xml파일을 만들어 줍니다.


res/xml/network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">api.xxx.com</domain>
</domain-config>
</network-security-config>

그리고 Manifest에 이 xml파일을 config파일로 지정해줍니다.


<application
...
android:networkSecurityConfig="@xml/network_security_config">



해결방법 2-1

위의 방법은 특정 주소를 허용가능하도록 설정하지만 그렇지 않은 상황인 경우도 있습니다.
예를들면, 우리 서비스가 아닌 특정 사이트나 특정 이미지 경로를 외부를 통해서 가져오게 되는데 이는 우리가 컨트롤 할 수 없는 부분이기 때문에 어쩔수없이 http주소를 사용해야 하는 경우도 있습니다.

그럴땐 위의 res/xml/network_security_config.xml에서 모든 경로가 허용되도록 설정해줍니다.
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>




해결방법3

위의 방법보다 더 간단한 방법도 있습니다.

Android Manfest에서 usesCleartextTraffic를 true로 설정합니다.

<application
...
android:usesCleartextTraffic="true">

이 방법이 2번의 방법보다 훨씬 간단한데 어떤점에서 안좋은게 있는것인지는 아직 알 수 없습니다.

혹시 3번의 방법의 단점을 아시는분은 댓글로 알려주시면 감사하겠습니다.




구글님 저희가 잘못했습니다.. 어린양을 괴롭히지 말아주세요..

안드로이드 기기의 파편화만으로도 대응하기 너무 힘든데 API레벨 OS별로 대응을 하도록 하지 않도록 도와주세요.

하지만 우린 답을 찾을것이다. 늘 그랬듯이

[IT/Android-TIP (한글)] - [안드로이드]Only fullscreen opaque activities can request orientation 과 중복주의)




그럼 모든 안드로이드 개발자분들의 정신건강을 응원합니다.

피쓰.

0 Comments
댓글쓰기 폼