web-dev-qa-db-fra.com

Webview ne peut pas accepter les cookies

Je crée une application Android basée sur WebView qui permet à l'utilisateur de se connecter à un opérateur mobile. Lorsque je lance l'application, WebView ouvre le site Web, mais je reçois un message m'indiquant que WebView n'autorise pas les cookies. J'ai essayé divers codes que j'ai trouvés ici, mais aucun d'entre eux n'a fonctionné. Quelqu'un peut-il m'aider? Voici le code que j'utilise:

//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");

et la méthode getCookies:

public String[] getCookie(String siteName) {
     CookieManager cookieManager = CookieManager.getInstance();
     String cookies = cookieManager.getCookie(siteName);
     String[] cookiesArray = cookies.split(";");
     return cookiesArray;
}
13
Darko Petkovski

Essayez de remplacer la méthode shouldOverrideUrlLoading pour que votre vue Web gère tous les liens d’URL et ne lance pas de nouveau navigateur sur aucun lien.

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

webview.loadUrl(url);

Si cela ne fonctionne pas, vous pouvez remplacer votre 

cookieManager.setAcceptCookie(true);

à

cookieManager.setAcceptThirdPartyCookies(true);

parce que cookieManager.setAcceptCookie(true); ne fonctionne pas sur Lollipop.

7
Vassilis Pallas

Avez-vous vérifié documentation Android ?

Si vous utilisez un niveau d'API> = 21, WebView synchronise automatiquement les cookies.

Si ce n'est pas le cas, essayez ceci:

    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
Alper Cem Polat

Vous devez activer javascript, puis obtenir que l'instance du gestionnaire de cookies accepte le cookie. En utilisant javascriptenable, le cookie est stocké.

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

3
Mayuresh Gawande

@Darko.

CookieManager.getInstance() est l'instance de CookieManager pour l'ensemble de votre application. Par conséquent, vous activez ou désactivez les cookies pour toutes les vues Web de votre application.

Cela devrait fonctionner normalement si votre vue Web est déjà initialisée: http://developer.Android.com/reference/Android/webkit/CookieManager.html#getInstance ()

Peut-être appelez-vous CookieManager.getInstance().setAcceptCookie(true); avant d’initialiser votre vue Web.

Merci,

0
Cruzer

Souvent, la connexion nécessite javascript, essayez d'ajouter ceci avant loadUrl:

webView.getSettings().setJavaScriptEnabled(true);

0
Maxim Gurevich