2016年8月29日月曜日

Android N PreviewのCookieManagerでCookieが取得できなくなる問題を踏んだ

Android N Previewで、CookieManager に変更があり、N以前では取得できたCookieが取得できなくなる問題に当たったのでメモです。

同じ問題はフォーラムでも報告されていました。
情報が少ないと言って閉じられているようですが。

NからOpenJDK に移行するにあたり、expiresでパースできるDateFormatが変わったようです。

N以前

N

NのexpiresのDateFormatはRFCの定義に沿っているようです(10.1.2  Expires and Max-Age)。

N以前もNも、定義されていないフォーマットの場合maxAgeに0がセットされます。

CookieStoreの実装も変更されています。
N以前ではaddメソッド内で追加時にCookieの値のチェックはありませんでしたが、NではmaxAgeが0の場合はcookiejarに追加されません。

つまりN以前でCookieManagerから取得できていた`Mon, 29 Aug 2016 21:15:00 -0000` のようなフォーマットのexpiresをもつCookieは、Nでは取得できないことになります。

expiresのパースに失敗したらCookieStoreに追加しない、というのはRFCに従えというのはそうですが、ちょっと困るケースもあります。

暫定的な処置としてmaxAgeを上書きしCookieManagerに再度追加するコード例です。
https://gist.github.com/mochico/c1acf4ca0d5caf76d29fd12d239053f3

2016.12.31 追記
https://code.google.com/p/android/issues/detail?id=220564
こちらの問題修正されたそうで近いうちにリリースされるそうです。
今からだと7.1.2以降ですかね。

0 件のコメント:

コメントを投稿