この記事の翻訳元:Android 8:クリアテキストHTTPトラフィックは許可されていません
私はAndroidの8でユーザーからの報告を持っていた私のアプリ(用途があることバックエンドフィード)は、コンテンツが表示されないこと。 私は私のアプリケーションは、コンテンツが表示されませんでした(リアフィードを使用)と言って、Androidの8人のユーザーからの報告を受けています。 調査の後、私は例外で起こっ以下見つかっアンドロイド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およびその他の可能な識別子 を削除しました)(パッケージ名、URLおよびその他の可能な識別子を削除しました)
Android 7以下ではすべてが機能しますが、android:usesCleartextTraffic
マニフェストで設定しtrue
ません(それを設定しても役に立たないため、それがデフォルト値です)。また、ネットワークセキュリティ情報を使用しません 。Android7以下では、すべてが正常に機能します、私はそれをリストに設定せずandroid:usesCleartextTraffic
(そしてtrue
常にデフォルトであるno availに設定しました)、ネットワークセキュリティ情報を使用しません。 I IFを呼び出しNetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted()
ITはAを返し、false
、Androidの8のためにtrue
、同じでAPKファイルを使用して、古いバージョンのために。 私が呼び出した場合NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted()
、その後、Androidの8のために、それは同じAPKファイルのリターンを使用するfalse
以前のバージョンのために(true
。 いくつか見つけることを試みた私をAndroid Oに関するGoogleの情報でこれについて言及しましたが、成功 しませんでした。GoogleのAndroid Oに関する情報でこれについて言及しようとしましたが、成功しませんでした。
#1階
参照:https : //stackoom.com/question/36lJd/Android-ClearテキストHTTPトラフィックは許可されていません
#2F
さて、私はこれを考え出した。 さて、私は知っています。 ITは、パラメータのマニフェストでが原因ですandroid:targetSandboxVersion="2"
。転送時に彼の-データを失うことはありませんすることによって、彼のITは、ユーザーアップグレードしたら正規のアプリケーションへの即時アプリから最後の中で確かをしなければならない-我々はまた、インスタントアプリのバージョンを持っていますので、私が追加したしたこと、 これは私が追加されるためマニフェストパラメータが含まれandroid:targetSandboxVersion="2"
ているのは、Instant Appバージョンもあるためです。InstantAppから通常のアプリケーションにアップグレードすると、ユーザーがデータを失うことがないようにする必要があります。渡す。 ただし、あいまいな説明が示唆するように: ただし、あいまいな説明は次のことを示唆しています。
このアプリが使用するターゲットサンドボックスを 指定 します。このアプリが使用するターゲットサンドボックスを指定します。sanboxのバージョンが高いほどセキュリティのレベルが高くなり、sanboxのバージョンが高いほどセキュリティのレベルが高くなります 。
この属性のデフォルト値は 1です。この属性のデフォルト値は1です。
それは明らかに、少なくともAndroid 8では新しいレベルのセキュリティポリシーを追加します。 明らかに、Android 8では新しいレベルのセキュリティポリシーも追加します。
#3階
AndroidManifestでこのパラメーターを見つけました: AndroidManifestでこのパラメーターを見つけました:
android:networkSecurityConfig="@xml/network_security_config"
また、@ xml / network_security_configはnetwork_security_config.xmlで次のように定義されています。@@ xml / network_security_config在network_security_config.xml中定义义:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<!--Set application-wide security config using base-config tag.-->
<base-config cleartextTrafficPermitted="false"/>
</network-security-config>
ちょうど私がtrueにcleartextTrafficPermittedを変えた が、私はcleartextTrafficPermitted trueに変更します
#4F
よらへのネットワークセキュリティに設定を - に応じてネットワークセキュリティの設定 -
Android 9(APIレベル28)以降、クリアテキストのサポートはデフォルトで無効になっていますAndroid 9(APIレベル28)以降、 クリアテキストのサポートはデフォルトで無効になっています。
また、AT Aを見てきた- https://koz.io/android-m-and-the-war-on-cleartext-traffic/ も-httpsを見ることができます。//koz.io/android-m-and-the -war-on-cleartext-traffic /
オプション1- オプション1-
作成ファイルres / xml / network_security_config.xml- 作成ファイルres / xml / network_security_config.xml-
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">domain.com (to be adjusted)</domain>
</domain-config>
</network-security-config>
AndroidManifest.xml- 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>
オプション2- オプション2
android:usesCleartextTraffic Doc android:usesCleartextTraffic Doc
AndroidManifest.xml- 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
も問題になる可能性があるため、@ david.sが指摘した回答も問題になる可能性があるため、android:targetSandboxVersion
よらへのマニフェストのドキュメントを - に応じて文書のリスト -
android:targetSandboxVersion
このアプリが使用する対象のサンドボックス。このアプリが使用する対象のサンドボックス 。 サンドボックスのバージョン番号が大きいほどセキュリティのレベルが高くなり、サンドボックスのバージョン番号が大きいほど セキュリティのレベル が高くなります。デフォルト値は1、 デフォルト値は1、デフォルト値は1です。 この属性を2に設定すると、アプリが別のSELinuxサンドボックスに切り替わります。2に設定 する こともできます。このプロパティを2に設定すると、アプリケーションが他のSELinuxサンドボックスに切り替わります。次の制限がレベル2のサンドボックスに適用されます。次の制限がレベル2のサンドボックスに適用されます 。
- 時のデフォルト値は
usesCleartextTraffic
コンフィグでのネットワークセキュリティではfalseです。 のネットワークセキュリティ設定usesCleartextTraffic
のデフォルト値はfalseです。- Uid共有は許可されていません。Uid共有は許可されていません 。
だからオプション3- だからオプション3-
あなたはしている場合は持っているandroid:targetSandboxVersion
で<manifest>
、それを減らすために1
あなたがいる場合<manifest>
持っているandroid:targetSandboxVersion
、そしてそれが低減され1
AndroidManifest.xml- AndroidManifest.xml-
<?xml version="1.0" encoding="utf-8"?>
<manifest android:targetSandboxVersion="1">
<uses-permission android:name="android.permission.INTERNET" />
...
</manifest>
#5F
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">***Your URL(ex: 127.0.0.1)***</domain>
</domain-config>
</network-security-config>
上記の提案では、URLはhttp://xyz.abc.com/mno/ でした。上記の提案では、提供したURL はhttp://xyz.abc.com/mno/でした。
ことは、私に変更xyz.abc.comそれは作業を開始。 私はそれを変更しますxyz.abc.com、その後、作業を開始します。
#6階
それは誰かにとって役に立つかもしれません 。
最近、Android 9 でも同じ問題が発生しましたが、 WebView内にいくつかのURLを表示するだけで、特別なことは何もありませんでした。最近、Android 9でも同じ問題が発生しましたが、一部のURLをWebViewで表示するだけで、何が特別なのか。つまりandroid:usesCleartextTraffic="true"
、マニフェストへの 追加android:usesCleartextTraffic="true"
は機能しましたがandroid:usesCleartextTraffic="true"
、アプリケーション全体のセキュリティを犠牲にしたくありませんでした 。したがって、マニフェストへの追加はですが、アプリケーション全体のセキュリティを犠牲にしたくありません。リンクからSO FIXにあったで変更http
するhttps
ので、解決策はリンクすることでhttp
変更をhttps