「Android 9以降でHTTPを利用する」の版間の差分
Administrator (トーク | 投稿記録) 編集の要約なし |
Administrator (トーク | 投稿記録) |
||
| 13行目: | 13行目: | ||
極端にいえば1バイトを送信したいのに鍵交換などだけで3000バイトくらいになります。 | 極端にいえば1バイトを送信したいのに鍵交換などだけで3000バイトくらいになります。 | ||
これは格安SIMの低速モードでは割と重大は問題になります。公称128Kbpsや64kbpsなどの携帯回線では実測値が公称値付近と絶好調に出たとしても、TLS暗号化を噛ますことによるデータ量の増大で実質的には9600bps程度しか流せないこともザラにあります。 | |||
小さいデータの代表格であるゲームなんかだと割と影響が大きいです。 | 小さいデータの代表格であるゲームなんかだと割と影響が大きいです。 | ||
2024年10月29日 (火) 03:39時点における最新版
Android 9から「セキュリティを強化する」という名目でアプリ内での通信はHTTPSが必須になり、HTTPで通信しようとすると以下のような例外を吐くようになりました。
Java.IO.IOException: Cleartext HTTP traffic to localhost not permitted
HTTPSの問題点[編集 | ソースを編集]
デバッグがめんどくさい[編集 | ソースを編集]
ただデバッグのときはHTTPSとオレオレ証明証だと色々とめんどくさいし捗らない。
暗号化によるデータ増大[編集 | ソースを編集]
HTTPSはHTTPと比較してデータ量が約10〜20倍に膨れ上がることがあります。 とくに小さいデータでは最低2〜3KBが追加され影響が大きくなります。 極端にいえば1バイトを送信したいのに鍵交換などだけで3000バイトくらいになります。
これは格安SIMの低速モードでは割と重大は問題になります。公称128Kbpsや64kbpsなどの携帯回線では実測値が公称値付近と絶好調に出たとしても、TLS暗号化を噛ますことによるデータ量の増大で実質的には9600bps程度しか流せないこともザラにあります。
小さいデータの代表格であるゲームなんかだと割と影響が大きいです。 よって、どう考えても重要ではないデータはHTTPで通信した方がよい。
すべてのドメインでHTTP通信を許可する[編集 | ソースを編集]
applicationタグの属性「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フォルダ
- .NET for 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">
<!-- domainタグでHTTP通信を許可するドメインやIPアドレスを列挙する -->
<domain includeSubdomains="true">yahoo.co.jp</domain>
<domain includeSubdomains="true">google.co.jp</domain>
<domain includeSubdomains="true">monobook.org</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>