為さねば成らぬ

retia.verno@gmail.com

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で開くようにした。