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;
}
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.
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;
}
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);
@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,
Souvent, la connexion nécessite javascript, essayez d'ajouter ceci avant loadUrl
:
webView.getSettings().setJavaScriptEnabled(true);