Android初心者の備忘録なので正確性に欠ける表現があるかもしれません、ご容赦ください。
背景
Android 9からネット通信時のデフォルトがHTTPS通信になりました。
(自分も今回の件を調べているなかで知りました。)
HTTPS通信をするとなると証明書を手に入れたり、申請をしたりする必要があります。
実際に公開するためならまだしも、
実装時の動作確認といった時のためにわざわざHTTPS化する必要もないと思います。
今回は個人的なプロジェクトで、
HTTPで(もといDockerで建てていたローカルと)通信できるよう設定する時に詰まり、
気づくまでに1日飛ばしたので備忘録も兼ねてまとめています。
(気づいた時には「あっ。。。 あ”あ”あ”」ってなりました)
HTTP通信の許可設定
ということで、意図的にHTTP通信を許可する設定を以下記事を参考に行います。
設定自体は、このサイトにある手順で問題なく行えます。
注意点(つまったところ)
「res/xml/
直下に network_security_config.xml を作成して設定する」こと自体は間違いではありません。
ただ、Build Variants
を使用している場合は注意です。
画像には2つのnetwork_security_config.xml のファイルがあり、
一見どちらも同じですが片方には、debug の文字がついています。
releaseではない時、つまりテストや開発中などdebugでのビルド時は、
このdebug の文字がついた方のnetwork_security_config.xmlが参照されます。
つまり、debug の文字がついていない方のnetwork_security_config.xmlをいくら変えても意味がないということです。
加えて、releaseの方でHTTP通信を許可する設定を入れるのは、セキュリティリスクを抱えるだけなので特別な事情があるでもない限り良くないです。
わざわざリスクを作る必要もないですしね。
設定例
http://example.com にアクセスする場合
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">example.com</domain>
</domain-config>
</network-security-config>
ローカル環境にアクセスする場合
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">192.168.43.160</domain>
</domain-config>
</network-security-config>
*設定しているサブドメインは以下に記載のサイトのものを引用*
IPアドレスは、各環境ごとに置き換えてください。
アクセスする際のURLは http://192.168.43.160:3000
という形式になります。
確認手順などは、以下記事に書かれています。
Build Variantsとは
Build Variants はざっくりいうと、
「アプリのベースを使いつつ、使用するAPIや文言などを開発用と公開用に簡単に切替えられる機能」でしょうか。
(自分はそのような認識です)
イメージ的には、レストランAの店主が
- 「今日はお得意様用に開店します!」というとお店や料理は変わらないけど、入れる人はお得意様のみ。
- 「今日は一般客様用に開店します!」というとお店や料理は変わらないけど、入れる人は一般客のみ。
みたいな感じでしょうか。
なんか逆にわかりにくい気しかしないですが。
Android初心者でまだまだわからないことだらけですが頑張っていきます。