안드로이드

[Android] java.net.UnknownServiceException: CLEARTEXT communication to apis.data.go.kr not permitted by network security policy 오류 해결

먹구루미 2024. 5. 1. 20:08

✏️ TIL(Today I Learned)

HTTP(평문 통신)을 사용하여 네트워크 요청을 하려고 시도했으나, 앱의 네트워크 보안 정책에 의해 허용되지 않아서 발생한 오류라고 한다. 최신 안드로이드 버전은 기본적으로 보안상의 이유로 평문 트래픽을 허용하지 않기 때문인 것 같다.

이를 해결하는 방법을 2가지 찾아봤다.

 

1. AndroidManifest.xml 파일의 <application> 부분에 android:usesCleartextTraffic="true"로 설정

<application
    android:usesCleartextTraffic="true"

 

cleartext HTTP와 같은 cleartext 네트워크 트래픽을 사용할지 여부를 나타내는 flag로 이 플래그가 flase 로 되어 있으면, 플랫폼 구성 요소 (예 : HTTP 및 FTP 스택, DownloadManager, MediaPlayer)는 일반 텍스트 트래픽 사용에 대한 앱의 요청을 거부하게 된다. 이 flag를 설정하게 되면 모든 cleartext 트래픽은 허용처리가 된다고 한다.

 

 

2. networkSecurityConfig 파일을 생성하고, AndroidManifest 에 등록

앱의 네트워크 보안 구성을 수정하여 원하는 도메인에 대해 평문 트래픽을 특별히 허용할 수 있다. 앱에 네트워크 보안 구성 파일을 추가하여 이를 수행할 수 있다.

 

res/xml 디렉토리에 networkSecurityConfig xml 파일을 생성한다.

// network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">apis.data.go.kr</domain>
    </domain-config>
</network-security-config>

 

<application> 태그에 android:networkSecurityConfig 속성을 추가하면된다.

 

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