본문 바로가기
Programing/android

[android studio] Cleartext HTTP traffic to...not permitted 오류

by TEXTBOX 2021. 11. 5.
728x90

앱 개발 도중 volly를 이용하여 api를 호출하여 결과 값을 받아와야 하는데,
리턴시에 [Cleartext HTTP traffic to www.***** not permitted]라는 오류가 발생하였다.

api쪽에서 제공할 때 오류인가 생각하다가 웹에서 호출시에는 정상적으로 결과가 나와
android studio에 뭔가 누락됐을꺼 같아 찾아보다보니 역시나 내 실수였다.

http로 호출시에  일반 텍스트 트래픽 사용에 대한 앱의 요청을 할 수 있도록
[AndroidManifest.xml] 파일 안 <application 태그 안에

android:usesCleartextTraffic="true"

위 속성을 넣어줘야 하는데 해당 속성이 누락되어 발생한 오류였다.

해당 속성에 대해서 구글 Developers에 내용을 다시 한번 확인해 보자.

android:usesCleartextTraffic

앱이 일반 텍스트 HTTP와 같은 일반 텍스트 네트워크 트래픽을 사용하는지 여부를 나타냅니다.
API 레벨 27 이하를 타겟팅하는 앱에서는 기본값이 "true"이고, API 레벨 28 이상을 타겟팅하는 앱에서는 기본값이 "false"입니다.

이 속성이 "false"로 설정되면 플랫폼 구성요소(예: HTTP 및 FTP 스택, DownloadManager, MediaPlayer)는 앱의 일반 텍스트 트래픽 사용 요청을 거부합니다. 타사 라이브러리도 이 설정을 준수하는 것이 좋습니다. 일반 텍스트 트래픽을 피하는 주요 이유는 기밀성, 진실성이 보장되지 않고 변조 방지가 불가능하기 때문입니다. 네트워크 공격자는 전송되는 데이터를 도청할 수 있으며 들키지 않고 수정할 수도 있습니다.

제공되는 액세스 수준으로 인해 Android 애플리케이션에서 나오는 일반 텍스트 트래픽을 모두 차단할 수는 없으므로, 이 플래그는 최대한 적용됩니다. 예를 들어 Socket API는 트래픽이 일반 텍스트인지 여부를 판별할 수 없으므로 이 플래그를 적용하는 데 있어 예외가 없습니다. 하지만 애플리케이션에서 나오는 대부분의 네트워크 트래픽은 상위 수준 네트워크 스택/구성요소에서 처리되며, 이 경우 ApplicationInfo.flags 또는 NetworkSecurityPolicy.isCleartextTrafficPermitted()에서 읽어 들여 이 플래그를 적용할 수 있습니다.

참고: WebView는 API 레벨 26 이상을 타겟팅하는 애플리케이션의 경우 이 속성을 적용합니다.

앱 개발 중에 StrictMode를 사용하여 앱의 일반 텍스트 트래픽을 식별할 수 있습니다. 자세한 내용은 StrictMode.VmPolicy.Builder.detectCleartextNetwork()를 참고하세요. 이 속성은 API 레벨 23에 추가되었습니다. 이 플래그는 Android 7.0(API 레벨 24) 이상에서 Android 네트워크 보안 구성이 있는 경우 무시됩니다.

 

삽질 끝~~

728x90

댓글