UnknownServiceException: CLEARTEXT communication to not permitted by network security policy
android Pie 대응을 위해서 targetSdkVersion을 28로 변경 후 갑자기
UnknownServiceException: CLEARTEXT communication to example.com not permitted by network security policy
와 같은 오류가 나오게 경험을 하게 됩니다.
이유는 android pie부터 http가 아닌 https를 이용해야 합니다.
Protecting users with TLS by default in Android P
의 내용을 확인하면 됩니다.
간단하게 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>
해주는 것입니다.
자세한 설명은
링크를 통해서 확인할 수 있습니다.
그래도.. 왠만하면 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 |