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;
}

person Darko Petkovski    schedule 30.11.2015    source источник
comment
Какое точное сообщение вы получаете о том, что веб-просмотр не разрешает файлы cookie? Вы видите это как предупреждение в пользовательском интерфейсе или сообщение в logcat или где-то еще?   -  person keno    schedule 04.12.2015
comment
@keno я получаю сообщение с их сайта, что файлы cookie недоступны   -  person Darko Petkovski    schedule 04.12.2015


Ответы (5)


Попробуйте переопределить метод shouldOverrideUrlLoading, чтобы ваш WebView обрабатывал все URL-ссылки и не запускал новый браузер по какой-либо ссылке.

webview.setWebViewClient(new WebViewClient() {  
          @Override  
          public boolean shouldOverrideUrlLoading(WebView view, String url)  
          {  
            return false;  
          }  
});   

webview.loadUrl(url);

Если это не сработает, вы можете заменить свой

cookieManager.setAcceptCookie(true);

to

cookieManager.setAcceptThirdPartyCookies(true);

потому что cookieManager.setAcceptCookie(true); не работает на Lollipop.

person Vassilis Pallas    schedule 08.12.2015

Вы проверили документацию 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");

получить куки:

  public String[] getCookie(CookieManager cookieManager, String siteName){
        String cookies = cookieManager.getCookie(siteName);
        String[] cookiesArray=cookies.split(";");
        return cookiesArray;
    }
person Alper Cem Polat    schedule 04.12.2015
comment
Не могли бы вы попробовать, изменив setAcceptCookie на setAcceptThirdPartyCookies(webView, true) - person Alper Cem Polat; 04.12.2015

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

webView.getSettings().setJavaScriptEnabled(true); CookieManager.getInstance().setAcceptCookie(true);

person Mayuresh Gawande    schedule 09.12.2015

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

webView.getSettings().setJavaScriptEnabled(true);

person Maxim Gurevich    schedule 09.12.2015

@Дарко.

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

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

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

Спасибо,

person Cruzer    schedule 09.12.2015