질문 : Android 8 : 일반 텍스트 HTTP 트래픽이 허용되지 않음
Android 8 사용자로부터 백엔드 피드를 사용하는 내 앱에 콘텐츠가 표시되지 않는다는보고가있었습니다. 조사 후 Android 8에서 다음 예외가 발생하는 것을 발견했습니다.
08-29 12:03:11.246 11285-11285/ E/: [12:03:11.245, main]: Exception: IOException java.io.IOException: Cleartext HTTP traffic to * not permitted
at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:115)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:458)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
at com.deiw.android.generic.tasks.AbstractHttpAsyncTask.doConnection(AbstractHttpAsyncTask.java:207)
at com.deiw.android.generic.tasks.AbstractHttpAsyncTask.extendedDoInBackground(AbstractHttpAsyncTask.java:102)
at com.deiw.android.generic.tasks.AbstractAsyncTask.doInBackground(AbstractAsyncTask.java:88)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
(패키지 이름, URL 및 기타 가능한 식별자를 제거했습니다)
Android 7 이하에서는 모든 것이 작동하며 매니페스트에서 android:usesCleartextTraffic
true
설정해도 도움이되지 않으며, 어쨌든 기본값입니다) 네트워크 보안 정보를 사용하지도 않습니다. 내가 전화하면 NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted()
, 그것은 반환 false
안드로이드 (8), 대한 true
같은 APK 파일을 사용하여 이전 버전에 대한. Android O에 대한 Google 정보에서 이에 대한 언급을 찾으려고했지만 성공하지 못했습니다.
답변
Android 9 (API 레벨 28)부터 일반 텍스트 지원은 기본적으로 사용 중지됩니다.
또한 Android M과 일반 텍스트 트래픽에 대한 전쟁을 살펴보십시오.
Google의 Codelabs 설명
옵션 1 -
먼저 "http : //"대신 "https : //"로 URL을 입력 해보십시오.
옵션 2-
res / xml / network_security_config.xml 파일 생성-
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">api.example.com(to be adjusted)</domain>
</domain-config>
</network-security-config>
AndroidManifest.xml-
<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:networkSecurityConfig="@xml/network_security_config"
...>
...
</application>
</manifest>
옵션 3-
android : usesCleartextTraffic Doc
AndroidManifest.xml-
<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:usesCleartextTraffic="true"
...>
...
</application>
</manifest>
또한 @ david.s의 답변이 지적했듯이 android:targetSandboxVersion
도 문제가 될 수 있습니다.
매니페스트 문서 에 따르면-
android:targetSandboxVersion
이 앱에서 사용할 대상 샌드 박스입니다. 샌드 박스 버전 번호가 높을수록 보안 수준이 높아집니다. 기본값은 1입니다. 2로 설정할 수도 있습니다.이 속성을 2로 설정하면 앱이 다른 SELinux 샌드 박스로 전환됩니다. 수준 2 샌드 박스에는 다음 제한 사항이 적용됩니다.
- 네트워크 보안 구성에서
usesCleartextTraffic
의 기본값은 false입니다. - Uid 공유는 허용되지 않습니다.
따라서 옵션 4-
<manifest>
에 android:targetSandboxVersion
이 있으면 1
AndroidManifest.xml-
<?xml version="1.0" encoding="utf-8"?>
<manifest android:targetSandboxVersion="1">
<uses-permission android:name="android.permission.INTERNET" />
...
</manifest>
출처 : https://stackoverflow.com/questions/45940861/android-8-cleartext-http-traffic-not-permitted
'프로그래밍 언어 > Android' 카테고리의 다른 글
SharedPreferences에서 commit ()과 apply ()의 차이점 (0) | 2021.07.14 |
---|---|
Android 휴대 전화에서 가로 세로 방향 확인하는 방법 (0) | 2021.07.13 |
Android Pull-to-Refresh 구현 방법 (0) | 2021.07.07 |
Android에서 프로그래밍 방식으로 현재 GPS 위치를 얻는 방법 (0) | 2021.07.07 |
TextView에서 HTML을 표시하는 방법 (0) | 2021.07.05 |