Android 9でWebViewでhttpのページがひらけない
背景
アプリ内で(まだ!)WebViewを使って簡易ブラウジングを行える部分がある。 URLをアプリで取り扱う時、基本的に次の3つがある
- WebView
- Chrome Custom Tab
- Intentで外部に投げる
intentで投げると自アプリから離脱することになるのでやりたくない。 またChromeCustomTabも、セキュリティなどの面から本当は使いたいが、Javascriptでのコールバックをアプリで受け取りたいのでそれも無理。 ということでWebViewを使っている。
課題
手元のOne Plus 6で触っていたら生きているはずのURLでエラーが出る。 結果として、Android 9だとhttp通信をデフォルトでは許可しなくなっているらしい。 android-developers.googleblog.com
これを許可するための設定が cleartextTrafficPermitted
である。
networkSecurityConfigにドメインごとの設定を書く。
<network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">insecure.example.com</domain> <domain includeSubdomains="true">insecure.cdn.example.com</domain> </domain-config> </network-security-config>
または、AndroidManifestに設定をする。 この場合全開放になるため注意が必要。
<application .... android:usesCleartextTraffic="true" ....>
最終的に、セキュリティ上の懸念点からこれらの設定を行わず、intentで開くようにした。