Android 9 Pieから、暗号化なしのリクエストは機能しなくなります。そしてデフォルトでは、システムはデフォルトでTLSを使用することを期待します。 この機能はここで読むことができます 。しかし、ブラウザのようなアプリなど、異なるサイトを介してリクエストを行うアプリについてはどうでしょう。
Android 9 Pieですべてのタイプの接続HTTPおよびHTTPSへの要求を有効にするにはどうすればよいですか?
これを実装する簡単な方法は、AndroidManifest.xml
にこの属性を使用して、すべてのリクエストに対してすべてのhttp
を許可することです。
Android:usesCleartextTraffic="true"
ただし、たとえば、さまざまなリンクに対していくつかのより多くの構成が必要な場合、一部のドメインではhttp
を許可し、他のドメインでは許可しないnetworkSecurityConfig
ファイル。
Android 9 Pieでこれを行うには、次のようにマニフェストnetworkSecurityConfig
タグにapplication
を設定する必要があります。
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application Android:networkSecurityConfig="@xml/network_security_config">
</application>
</manifest>
次に、xml
フォルダーで、マニフェストで名前を付けたのと同じようにnetwork_security_config
という名前のファイルを作成する必要があります。ファイルのコンテンツは、暗号化:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
</network-security-config>
そこから行くことができます。これで、アプリはすべてのタイプの接続に対してリクエストを行います。このトピックの詳細については、 こちらをご覧ください 。
完全に機能するソリューションこの問題に直面しているAndroid
またはReact-native
の両方のユーザーは、このAndroid:usesCleartextTraffic="true"
をAndroidManifest.xmlファイルに次のように追加するだけです。
Android:usesCleartextTraffic="true"
tools:ignore="GoogleAppIndexingWarning">
<uses-library
Android:name="org.Apache.http.legacy"
Android:required="false" />
次のような<application>
.. </application>
タグの間に:
<application
Android:name=".MainApplication"
Android:label="@string/app_name"
Android:icon="@mipmap/ic_launcher"
Android:allowBackup="false"
Android:theme="@style/AppTheme"
Android:usesCleartextTraffic="true"
tools:ignore="GoogleAppIndexingWarning">
<uses-library
Android:name="org.Apache.http.legacy"
Android:required="false" />
<activity
Android:name=".MainActivity"
Android:label="@string/app_name"/>
</application>
簡単な方法は、Android:usesCleartextTraffic="true"
をAndroidManifest.xml
に設定することです
Android:usesCleartextTraffic="true"
あなたのAndroidManifest.xml
は次のようになります
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.dww.drmanar">
<application
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:usesCleartextTraffic="true"
Android:theme="@style/AppTheme"
tools:targetApi="m">
<activity
Android:name=".activity.SplashActivity"
Android:theme="@style/FullscreenTheme">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
これがお役に立てば幸いです。
AndroidManifest.xml
ファイルのアプリケーションタグにusesCleartextTraffic
フラグを設定するだけです。 Android用の構成ファイルを作成する必要はありません。
<application
Android:usesCleartextTraffic="true"
.
.
.>
デバッグで実行中のReact Native
アプリケーションの場合、@ Xenolionが言及したxml block
をreact_native_config.xml
にある<project>/Android/app/src/debug/res/xml
に追加します
次のスニペットに似ています:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="false">localhost</domain>
<domain includeSubdomains="false">10.0.2.2</domain>
<domain includeSubdomains="false">10.0.3.2</domain>
</domain-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
</network-security-config>
HTTP Fixを使用してclearTextを送信しているかどうかを確認できます: https://medium.com/@son.rommer/fix-cleartext-traffic-error-in-Android-9-pie-2f4e9e2235e6
または
Apache HTTPクライアントの非推奨の場合(Googleから):Android 6.0では、Apache HTTPクライアントのサポートが削除されました。 Android 9以降、そのライブラリはbootclasspathから削除され、デフォルトではアプリで使用できません。 Apache HTTPクライアントを引き続き使用するために、Android 9以降を対象とするアプリは、AndroidManifest.xmlに次を追加できます。
ソース https://developer.Android.com/about/versions/pie/Android-9.0-changes-28