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先生のコンソールで怒られまくってるんですが、そろそろ消されますよ?