drcarter의 DevLog

android Pie 대응을 위해서 targetSdkVersion을 28로 변경 후  갑자기

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

와 같은 오류가 나오게 경험을 하게 됩니다.


이유는 android pie부터 http가 아닌 https를 이용해야 합니다.



의 내용을 확인하면 됩니다.


간단하게 api의 도메인이 http가 아닌 https를 지원하고 http를 https로 변경만 하면 됩니다. 대부분의 회사 api들이 https를 지원하지만 그렇지 않은 경우도 있죠.

이럴 땐 http로 통신할 도메인들에 대해서 관리를 해주면 됩니다.


우선


res/xml/network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
   
<domain-config>
       
<domain includeSubdomains="true">example.com</domain>
       
<trust-anchors>
           
<certificates src="@raw/my_ca"/>
       
</trust-anchors>
   
</domain-config>
</network-security-config>


와 같은 파일을 만들어 준 뒤

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

와 같이 androidmanifest에 등록해 줍니다.


다른 방법은.

<base-config cleartextTrafficPermitted="true" />

을 network_security_config.xml에 등록을 해서 기본적으로 http를 지원하게 하는 방법도 있습니다. 이건 지정된 domain이외에 기본적으로.. 외부의 api 에 대해서 http를 지원하겠다고 하는 것입니다.


또 다른 방법으로는

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

해주는 것입니다.

자세한 설명은

android:usesCleartextTraffic


링크를 통해서 확인할 수 있습니다.


그래도.. 왠만하면 api는 https를 지원하는게 좋겠죠!!!!

'Android' 카테고리의 다른 글

goodbye? onActivityResult...  (0) 2020.05.14
kotlin file read...  (0) 2019.04.17
AndroidStudio에서 File Template이용하기.  (0) 2016.06.14
AndroidStudio에서 lombok 사용하기  (0) 2016.04.10
Dagger2 + Sqlbrite  (0) 2015.11.17