Глюк с cookies в WebView под 2.3
От: n0dwis Украина  
Дата: 11.11.15 07:05
Оценка:
Столкнулся с такой проблемой — компонент как-то странно работает с куками под 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 авторизация проходит не всегда. Как правило, срабатывает с первого раза, после очистки всех данных приложения.

Буду благодарен за любые подсказки.
webview cookie авторизация
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.