概要
WebViewでCookieを使おうと思った時、4系以降のOSに対応させようと思って発生した出来事です。
初回だけCookieが反映されず、WebViewの表示が正常ではなかった。
原因
WebViewのCookieってどこで登録してますか?
やっぱりWebViewClientのonPageStartedですか?
私も、onPageStartedです。
・・・原因はこれでした。
解決策
これは、5.0以降だとダメっぽいです。
4系だと正常に動いてくれます。
4系では、WebViewを生成してから、onPageStartedでCookieを登録していくことになると思います。
しかし、5.0以降では、onPageStartedでは、Cookieの登録が間に合わないようです。
5.0以降になると、WebViewを生成する前に、Cookieを登録しても怒られないようになっています。
例えば、MainActivityのOnCreateで書いたりします。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
CookieManager cm = CookieManager.getInstance();
cm.setAcceptCookie(true);
cm.setCookie(BuildConfig.URL_API_BASE, COOKIE_VALUE);
}
これ、きちんとバージョンで分岐してあげないと、エラーも吐かずにアプリが落ちます。
最初落ちてるところを特定するのに苦労しました・・・。
こうしてWebViewを作る前にCookieを登録してあげることで、正常に動作するようになりました。
4x系では、以前と同様onPageStartedで設定してあげる必要があります。
対応OS5.0以降でいいよっていう素敵な環境ならonPageStartedに記述する必要はありません。
もっとスマートにならないのかね、これ・・・。
以上、WebViewのCookieの扱いで激ハマりしたことでした。