Android にて WebView で扱われる Cookie を CookieManager で取得できる。
WebView wv = (WebView)findViewById(R.id.webView);
wv.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
CookieManager cookieManager = CookieManager.getInstance();
String[] cookies = cookieManager.getCookie(url).split(";");
for(String cookie : cookies) {
Log.d(TAG, cookie);
}
}
});
古くからある属性(Path etc)は どの OS バージョンでも同じように挙動するようだが、
最近導入されている属性がついている場合、古い OS バージョンは取れるが、新しい OS バージョンだと取れないということがあった。
例えば、ASP.NET Core2.0 で Identity を特に何も設定しないで使うと クッキーに samesite 属性が付与される。
Set-Cookie: .AspNetCore.Identity.Application=CfD..(中略)....;
expires=Fri, 15 Dec 2017 11:13:50 GMT;
path=/;
samesite=lax;
httponly
このクッキーは Android 7 以前では取得できたが、Android 7以降では取得できなくなっていた。
(Nexus5 + Android 6 / Nexus6 + Android7 / Nexus5X + Android8 で確認)
OS バージョンによって CookieManager.getCookie() で取れたり取れなかったりする場合、属性も確認要点の一つですね、と。
なお、ASP.NET Core 2.0 で samesite 属性は以下のように変更できる。
public class Startup
{
:
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentity<AuthTestUser, DummyRole>().AddDefaultTokenProviders();
services.ConfigureApplicationCookie(options =>
{
// 外す場合
options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None;
});
}
:
}