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に再度追加するコード例です。

0 件のコメント:

コメントを投稿