AndroidのWebViewを完璧に切り分けたい

AndroidのLineアプリから来た人だけ異なるコンテンツを見せたいという需要があって、WebView周りをちょっと調べたのでまとめておきます。結局はUser-AgentにLineという文字列が必ず入るという結論に至ったので、ここに書いてあることは何一つ活かされませんでしたが。

とりあえずAndroidのWebViewとは何なのかさえ知らずにスタートしたのですが、一般の方にはアプリ内ブラウザって言った方が伝わるのでしょうか?LineとかTwitterのアプリに書き込んだURLを開いたら起動するやつです。てっきりブラウザを呼び出していると思いきや、別のものなんだそうです。

このWebView、呼び出すアプリ側でUser-Agentを設定できるようで、親切なアプリなら分かりやすい文字列を入れておいてくれると思います。LineもTwitterもFacebookも入っているはず。特定のアプリをターゲットに判断するだけなら、特定の文字列で検査すればいいですね。

しかし、WebView全般を判別したい場合は細かく対応する必要があります。まー、個人でやったら大変だから、有名なJavaScriptプロジェクトのライブラリを利用したほうがいいでしょうけどね。特に今後どうなるかは怪しいと思いますので、みんなの力を合わせたほうがいいでしょう。

ライブラリを利用するにしても知識は合ったほうがいいです。分類していきましょう。

まずはAndroid 4.4ぐらいの人たち。KitKatからLollipopって言った方が正しいのかな。この人達はWebViewだとUser-Agentに「Version/X.X」という文字列が入るらしい。
User Agent Strings – Google Chrome.
どこにでもありそうなんだけど、そういうことらしい。

しかし、その前にAndroid 4.4ぐらいの人達を見分けるのはどうすればいいのか?
WebView for Android – Google Chrome.
そういう人達はChromeのバージョンが30から36なんだそうです。そして機能的に色々と少なくて、バージョンアップごとに機能が充実していくんだけど、Fullscreen APIとかFilesystem APIとかは36になっても実装されなかったそうです。この辺の機能で切り分けるのもアリかもしれないですね。

そしてAndroid 5以降、Lollipop以降の人達はというと、User-Agentに「wv」という文字列が入るんだそうです。実際にそれで判断する場合は「; wv)」という文字列で判断するのがいいようです。

最後に、Android 4.4より前、KitKat前の人達ですが、たぶん、この時代にはWebViewというものはなかったのでしょう。判断基準も特に見当たりません。

さて、これで判断できた。と思いきや、悲報です。
User Agent | Android(TM) 技術情報 | au.
WebViewと標準ブラウザのUser-Agentが同じものがチラホラ。何かの力が働いてブラウザを独自に実装したものの、ゼロから実装するのは無理なのでWebViewでお茶を濁したってことか?そんな中途半端なブラウザなんか乗せるなよなー。

というわけで、User-Agentで完全に切り分けるのは諦めたほうが良さそうです。有名なライブラリでも難しいんじゃないのかな。完璧を求めるなら全機種実機テストをお勧めします。