티스토리 뷰

728x90
반응형

며칠 전 안드로이드 개발을 하다가 아래와 같은 오류를 봤다.


UnknownServiceException: CLEARTEXT communication to example.com not permitted by network security policy


아래와 같이 오류가 발생할 수도 있다.


Exception: IOException java.io.IOException: Cleartext HTTP traffic to * not permitted


이 이슈는 Android Pie에서만 발생되었다.


확인 해 보니 이유는, 안드로이드 Pie부터는 http로의 평문 전송이 기본적으로 차단되기 때문이다.


이와 관련해서 구글 공식 안드로이드 블로그에서도 다뤘었다.

그리고 이 글을 내가 번역도 해 뒀으니, 관심있으신 분은 확인 바란다.


결론적으로는, 이를 해결하기 위해서는 크게 3가지 방법이 있다.


방법 1. 접근해야 하는 엔드포인트 서버를 http가 아닌 https로 바꾼다. (가장 이상적)


방법 2. 접근을 허락 할 http를 명시적으로 표시한다.


a. res/xml/network_security_config.xml 파일을 아래와 같이 추가한다.

아래 파일에서 예시 도메인들을 접근해야 할 도메인들로 바꾸면 된다.


<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">insecure.example.com</domain>
        <domain includeSubdomains="true">insecure.cdn.example.com</domain>
    </domain-config>
</network-security-config>


b. AndroidManifest.xml 파일에 아래와 같이 network_security_config 파일을 참고하도록 명시한다.

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
   
<application android:networkSecurityConfig="@xml/network_security_config"
                    ...
>
        ...
   
</application>
</manifest>


방법 3. 안드로이드 Pie 이하에서 동작하는 것 처럼, 모든 http에 대해서 접근을 할 수 있도록 한다.


a.  AndroidManifest.xml 파일에 아래와 같이 usesCleartextTraffic 속성을 true로 바꾼다.


<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
   
<application android:ueseCleartextTraffic="true"
                    ...
>
        ...
   
</application>
</manifest>


728x90
반응형
댓글