Столкнулся с такой проблемой — компонент как-то странно работает с куками под Android 2.3. Как будто он их выборочно игнорирует.
Из-за этого невозможно авторизоваться на сайте — авторизация проходит, но, поскольку куки нет, при загрузке любой страницы происходит редирект на страницу логина.
Причём на 4-м Android-е всё работает отлично.
В коде ничего хитрого нет.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.program_view);
web = (WebView) findViewById(R.id.webView);
web.getSettings().setJavaScriptEnabled(true);
CookieManager.getInstance().setAcceptCookie(true);
web.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
if (url.contains("/login")) {
CookieSyncManager.createInstance(web.getContext());
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setCookie(serverUrl, AUTHORIZE_COOKIE_NAME + "=; path=/; secure");
CookieSyncManager.getInstance().sync();
}
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
saveProgramToken();
}
private String readCookies() {
CookieSyncManager.createInstance(web.getContext());
CookieSyncManager.getInstance().sync();
return CookieManager.getInstance().getCookie(serverUrl);
}
});
String token = readProgramToken();
if (token != null) {
CookieSyncManager.createInstance(web.getContext());
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setCookie(serverUrl, AUTHORIZE_COOKIE_NAME + "=" + token + "; path=/; secure");
cookieManager.setCookie(serverUrl, USER_COOKIE_NAME + "=" + getDeviceId() + "; path=/; secure");
CookieSyncManager.getInstance().sync();
}
web.loadUrl(serverUrl);
}
Даже без обработки событий onPageStarted/onPageFinished авторизация проходит не всегда. Как правило, срабатывает с первого раза, после очистки всех данных приложения.
Буду благодарен за любые подсказки.