Android — Webview не может принимать куки

Я создаю приложение для 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;
}

13

Решение

Попробуйте переопределить 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.

7

Другие решения

Вы проверили 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;
}
3

Вы должны включить javascript, а затем получить экземпляр cookie cookie и принять cookie. При помощи javascriptenable cookie сохраняется

webView.getSettings () setJavaScriptEnabled (истина).
. CookieManager.getInstance () setAcceptCookie (истина);

3

Часто для входа требуется JavaScript, попробуйте добавить это раньше loadUrl:

webView.getSettings().setJavaScriptEnabled(true);

0

@Darko.

CookieManager.getInstance() это экземпляр CookieManager для всего вашего приложения. Следовательно, вы включаете или отключаете куки для всех веб-просмотров в вашем приложении.

Обычно это должно работать, если ваше веб-представление уже инициализировано: http://developer.android.com/reference/android/webkit/CookieManager.html#getInstance ()

Может быть, вы звоните CookieManager.getInstance().setAcceptCookie(true); прежде чем инициализировать ваше веб-представление.

Спасибо,

0