본문 바로가기
Android/이것저것

[Android] Cleartext HTTP ~ bot permitted Error

by 일상 속 둔치 2020. 7. 19.

혼자 사이드 프로젝트를 진행하다가 폰에서 로컬이 접속이 안되는 문제가 발생했었다...

 

같은 망을 쓰니까 방화벽도 문제가 아닐거고... url도 정확하고... 심지어 웹 브라우저로는 들어가졌다!

 

그래서 찾아보니...

 

안드로이드9(Pie, API 28)부터는 기본적으로 HTTPS를 사용하기 때문에 HTTP로는 통신이 되지 않는 것이 Default 설정이다.

 

따라서 HTTP 통신을 허용하는 설정을 추가로 해주었다.

 

HTTP와 HTTPS의 차이점에 대해서는 다음에 다뤄보도록 하자.

 

AndroidManifest.xml 중 application 태크에 아래 속성을 추가해주자.

android:usesCleartextTraffic="true"

 

cleartext 속성이 기본으로 false로 되어 있는데 이때, HTTP, FTP, DownloadManager, MediaPlayer 등 일반 텍스트에 대한 트래픽은 앱이 거부하게 되어있다! 그래서 true를 통해 HTTP 통신을 허용해주자.

 

이 외에도 허용할 수 있는 방법은 2가지가 더 있다.

 

* config 파일을 통해 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에 등록된 example.com 이라는 사이트는 HTTP 통신이 가능해진다.

 

매니페스트 파일에서 위에서 생성한 XML을 등록해줘야한다!

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

 

* targetSandboxVerson 1로 설정

SandboxVersion이 높을 수록 보안이 강화된다. Default로는 2로 설정되어있다. 이 역시 매니페스트 파일에서 수정 가능하다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:targetSandboxVersion="1">
    <application ...>
    </application>
</manifest>

 

- 끝 -

'Android > 이것저것' 카테고리의 다른 글

[Android] ViewPager2  (0) 2020.10.11
[Android] Retrofit, HTTP 통신을 위한 라이브러리  (0) 2020.07.27
FloatingActionButton  (0) 2020.07.11
Fragment  (0) 2020.07.05
NotificationListenerService  (0) 2020.05.10

댓글