Настройка Cookies в WebView android

Я пытаюсь установить некоторые куки файлы на мой WebView, чтобы открыть браузер с тем же сеансом, который у меня есть в моем приложении.

Я прочитал много ответов, но они не работают для меня. Единственное решение, которое я нашел, - это loadUrl, hardcode данные cookie в extraHeaders, но, как и ожидалось, это работает только для этих запросов и не поддерживает сеанс.

Код, который у меня есть:

CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(mWebView.getContext());
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();
cookieManager.setCookie("http://xx.xxx.example.com","mid="+MySession.GetSession().sessionId+" ; Domain=.example.com");
cookieSyncManager.sync();

String cookie = cookieManager.getCookie("http://xx.xxx.example.com");

Log.d(LOGTAG, "cookie ------>"+cookie);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new TuWebViewClient());
mWebView.loadUrl("http://xx.xx.example.com");

getCookie() возвращает правильные данные, но когда я читаю файлы cookie с сервера, они пусты. Что не так? Пожалуйста, порекомендуйте. Спасибо!

Ответы

Ответ 1

Решено!!!! проблема с webView, я не знаю, что произошло, но если я создаю

WebView webView = new WebView(Activity.this);

он работает. Если я прочитал webview из активности с помощью findViewById(), это не сработает.

Также, если вам нужно установить список файлов cookie, которые вы получили ранее с веб-сайта. Все, что вам нужно сделать, это использовать for-loop, чтобы пройти и установить все из них. Это помогло мне решить ситуацию.

Ответ 2

CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(mWebView.getContext());
...
cookieSyncManager.sync();

является причиной проблемы. Вы должны сделать следующее:

CookieSyncManager.createInstance(mWebView.getContext());
...
CookieSyncManager.getInstance().sync();

И не будет необходимости вручную создавать WebView...