Webview не может принимать файлы cookie
Я создаю приложение Android на базе WebView, которое позволяет пользователю входить в систему на мобильный оператор. Когда я запускаю приложение, WebView открывает веб-сайт, но я получаю сообщение о том, что WebView не разрешает использование файлов cookie. Я пробовал различные коды, которые я нашел здесь, но никто из них не работал. Может кто-нибудь мне помочь? Вот код, который я использую:
//in oncreate
final CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(this);
final CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();
String[] cookies = getCookie("https://myaccount.ee.co.uk/login-dispatch/?fa=register");
for (String cookie : cookies) {
cookieManager.setCookie("https://myaccount.ee.co.uk/login-dispatch/?fa=register", cookie);
}
cookieSyncManager.sync();
webView.loadUrl("https://myaccount.ee.co.uk/login-dispatch/?fa=register");
и метод getCookies:
public String[] getCookie(String siteName) {
CookieManager cookieManager = CookieManager.getInstance();
String cookies = cookieManager.getCookie(siteName);
String[] cookiesArray = cookies.split(";");
return cookiesArray;
}
Ответы
Ответ 1
Попробуйте переопределить метод shouldOverrideUrlLoading
, чтобы ваш WebView обрабатывал все URL-ссылки, а не запускал новый браузер по любой ссылке.
webview.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
return false;
}
});
webview.loadUrl(url);
Если это не сработает, вы можете заменить cookieManager.setAcceptCookie(true);
на cookieManager.setAcceptThirdPartyCookies(true);
, потому что cookieManager.setAcceptCookie(true);
не работает на Lollipop.
Ответ 2
Вам нужно включить javascript, а затем получить экземпляр менеджера cookie accept cookie с помощью javascriptenable cookie будет сохранен
webView.getSettings() setJavaScriptEnabled (истина).. CookieManager.getInstance() setAcceptCookie (истина);
Ответ 3
Вы проверили документацию по Android?
Если вы используете уровень API >= 21, WebView автоматически синхронизирует файлы cookie.
Если не попробовать это:
final CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(this);
final CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeAllCookie();
cookieManager.setAcceptCookie(true);
String[] cookies = getCookie(cookieManager, "https://myaccount.ee.co.uk/login-dispatch/?fa=register");
for (String cookie : cookies) {
cookieManager.setCookie("https://myaccount.ee.co.uk/login-dispatch/?fa=register", cookie);
}
cookieSyncManager.sync();
webView.loadUrl("https://myaccount.ee.co.uk/login-dispatch/?fa=register");
getCookies:
public String[] getCookie(CookieManager cookieManager, String siteName){
String cookies = cookieManager.getCookie(siteName);
String[] cookiesArray=cookies.split(";");
return cookiesArray;
}
Ответ 4
Зачастую для входа в систему требуется javascript, попробуйте добавить это до loadUrl
:
webView.getSettings().setJavaScriptEnabled(true);
Ответ 5
@Darko.
CookieManager.getInstance()
- экземпляр CookieManager для всего вашего приложения. Следовательно, вы включаете или отключите файлы cookie для всех веб-просмотров в своем приложении.
Обычно он должен работать, если ваш веб-просмотр уже инициализирован: http://developer.android.com/reference/android/webkit/CookieManager.html#getInstance()
Возможно, вы вызываете CookieManager.getInstance().setAcceptCookie(true);
, прежде чем инициализировать свой веб-просмотр.
Спасибо,