Android 9 Pieから、暗号化なしのリクエストは機能しません。デフォルトでは、システムはデフォルトでTLSを使用することを想定しています。この機能はここで読むことができるので、HTTPS経由でのみリクエストを行う場合は安全です。しかし、ブラウザのようなアプリなど、異なるサイトを介してリクエストを行うアプリはどうでしょうか。
Android 9 Pieですべてのタイプの接続HTTPおよびHTTPSへのリクエストを有効にするにはどうすればよいですか?
Android 9 Pieから、暗号化なしのリクエストは機能しません。デフォルトでは、システムはデフォルトでTLSを使用することを想定しています。この機能はここで読むことができるので、HTTPS経由でのみリクエストを行う場合は安全です。しかし、ブラウザのようなアプリなど、異なるサイトを介してリクエストを行うアプリはどうでしょうか。
Android 9 Pieですべてのタイプの接続HTTPおよびHTTPSへのリクエストを有効にするにはどうすればよいですか?
回答:
これを実装する簡単な方法は、すべてのリクエストに対してすべてAndroidManifest.xml
を許可する場所にこの属性を使用することですhttp
。
<application android:usesCleartextTraffic="true">
</application>
ただし、たとえば、いくつかのドメインでは許可し、他のドメインでは許可しないなど、さまざまなリンクにさらに構成を追加するhttp
場合は、res/xml/networkSecurityConfig.xml
ファイルを提供する必要があります。
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>
そこからあなたは行ってもいいです。これで、アプリはすべてのタイプの接続をリクエストします。このトピックの詳細については、こちらをご覧ください。
両方またはこの問題に直面しているユーザーのための完全に機能するソリューションは、次のようにこれ
をAndroidManifest.xmlファイルに追加するだけ
です:Android
React-native
android:usesCleartextTraffic="true"
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>
tools:ignore
エラーが発生した場合は、必ずxmlns:tools="http://schemas.android.com/tools"
内に追加してくださいapplication
。そのように<application xmlns:tools="http://schemas.android.com/tools" ...
NSAppTransportSecurity
info.plist に追加することです。stackoverflow.com/questions/38418998/...
簡単な方法が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>
これがお役に立てば幸いです。
React Native
デバッグで実行中のアプリケーションの場合xml block
は、@ Xenolionによって言及されている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>
同じ問題が発生し、@ Xenolionの回答にあるように、セキュリティ構成に異なるタグが含まれていることに気付きました
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
</domain-config>
</network-security-config>
タグ「ドメイン構成」を「ベース構成」に変更して、次のように機能します。
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
</base-config>
</network-security-config>
HTTPフィックスを介して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