Android 9以降でHTTPを利用する
Android 9から「セキュリティを強化する」という名目でアプリ内での通信はHTTPSが必須になり、HTTPで通信しようとすると以下のような例外を吐くようになった。
Java.IO.IOException: Cleartext HTTP traffic to localhost not permitted
ただデバッグのときはHTTPSとオレオレ証明証だと色々とめんどくさいし捗らない。
目次
すべてのドメインでHTTP通信を許可する
「android:usesCleartextTraffic="true"」で全許可となる。 当然ながらオススメされない方法である。 この方法はそのうちGoogle Playの審査で弾かれるようになるかもしれない。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="org.monobook.app1">
<uses-sdk
android:minSdkVersion="21"
android:targetSdkVersion="28" />
<!-- network_security_config.xmlを適用する -->
<application
android:label="app1.Android"
android:usesCleartextTraffic="true" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
特定のドメインのみHTTP通信を許可する
xmlフォルダを作る
- Android Studio = resフォルダ
- Xamarin.Android = Resourcesフォルダ
上記フォルダの中に「xmlフォルダ」を新規作成する。
network_security_config.xmlを作る
さきほど作ったxmlフォルダ内にnetwork_security_config.xmlを新規作成する。
<?xml version="1.0" encoding="utf-8" ?>
<network-security-config>
<!-- デフォルトの設定 -->
<base-config cleartextTrafficPermitted="false" />
<!-- ドメイン毎の設定 -->
<domain-config cleartextTrafficPermitted="true">
<!-- HTTP通信を許可するドメインを列挙しておく -->
<domain includeSubdomains="true">10.0.2.2</domain>
</domain-config>
</network-security-config>
AndroidManifest.xmlを書き換える
AndroidManifest.xmlをマウスで右クリックして「プログラムから開く」の「ソースコードエディター」を選ぶ。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="org.monobook.app1">
<uses-sdk
android:minSdkVersion="21"
android:targetSdkVersion="28" />
<!-- network_security_config.xmlを適用する -->
<application
android:label="app1.Android"
android:networkSecurityConfig="@xml/network_security_config">
/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
</manifest>