現在のAndroid 9 Pieからは、暗号化されていないリクエストは決して機能しません。また、デフォルトでは、システムはTLSを使用することを期待しています。この特集はこちらで読めますだから、HTTPSを介してのみリクエストを行うのであれば安全です。しかし、異なるサイトを経由してリクエストを行うアプリ、例えばブラウザのようなアプリの場合はどうでしょう。
Android 9 PieでHTTPとHTTPSのすべての種類の接続へのリクエストを有効にするにはどうすればいいですか?
これを実装する簡単な方法は、この属性を AndroidManifest.xml
で使用し、すべての http
をすべてのリクエストに対して許可することです。
android:usesCleartextTraffic="true"
しかし、例えば、あるドメインにはhttp
を許可するが、他のドメインには許可しないなど、異なるリンクに対してさらに設定したい場合には、networkSecurityConfig
ファイルを用意する必要があります。
Android 9 Pieでこれを行うには、Manifestのapplication
タグ内に以下のようにnetworkSecurityConfig
を設定する必要があります。
<?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" />
AndroidManifest.xmlファイルの{{533832}}のように、<application>
の間にタグの間に {{533823}} を挿入します。
<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>
React Nativeアプリケーションをデバッグで実行する場合は、@Xenolion氏が言及した「xmlブロック」を、<project>/android/app/src/debug/res/xml
にあるreact_native_config.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>