• home
  • AndroidのWebViewの思い出

AndroidのWebViewの思い出

Wano の 伏見です。
この記事はWanoグループ Advent Calendar 2016の9日目の記事になります。

この記事に関しては死亡事故のたびに随時追記するかも。

webViewのCookieの同期で死亡

Android WebViewのCookieの扱いで激ハマりした話
この記事と違って4.4系では死ななかった。4.2ではものも言わずアプリは死にました。

そもそも4.4までのCookieマネージャがdeprecatedなので分岐大変

最新のOSのWebViewでアブないサイトに対応する

http/https混在環境で mixed contentsの設定をガバガバにします。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    webView.getSettings().setMixedContentMode( WebSettings.MIXED_CONTENT_ALWAYS_ALLOW );
}

アブないOSのWebView でセキュアなサーバーに接続する

デフォルトで SSlv3 で通信するようになっている OS の場合、
OkHttp や HttpUrlConnection などの通信系ライブラリは、通信前にGooglePlayServicesから動的にパッチを当てれば、TLS1 ~ 1.2系が使えるようになる場合があります。

同期的にパッチを当てる場合

try {
    ProviderInstaller.installIfNeeded(getActivity());
} catch (GooglePlayServicesRepairableException e) {
    e.printStackTrace();
} catch (GooglePlayServicesNotAvailableException e) {
    e.printStackTrace();
}

それでも4.3以前の デフォルトWebView では SSLv3 を 使ってしまうことがある。対応できません

通信の上書きにも限界があるでしょう。

学び

  • アプリサイズがかなり大きくなることと引き換えに、代替WebViewのCrossWalkを使おう
  • でも基本的にしょうもないものはどんどん捨てよう
  • 要件定義で殺そう
  • iOS8や4.3系以下はセキュリティ的にもはや危ないし、シェア的にも対応コストの方が高いという認識を周知していこう

それはそうと

ECサイトとかのトラッキング & 広告系 のタグ , ページのロードをブロックしながら document.write()しててChrome先生のコンソールで怒られまくってるんですが、そろそろ消されますよ?