问题
I'm creating a WebView based Android app that enables the user to login onto a mobile operator. When I run the app the WebView opens the website but I get a message that the WebView doesn't allow cookies. I've tried various codes that I found here but none of them worked. Can anyone help me? Here is the code I'm using:
//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");
and the getCookies method:
public String[] getCookie(String siteName) {
CookieManager cookieManager = CookieManager.getInstance();
String cookies = cookieManager.getCookie(siteName);
String[] cookiesArray = cookies.split(";");
return cookiesArray;
}
回答1:
Try to override the shouldOverrideUrlLoading
method to make your WebView handle all URL links, and not start a new browser on any link.
webview.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
return false;
}
});
webview.loadUrl(url);
If this doesn't work you can replace your
cookieManager.setAcceptCookie(true);
to
cookieManager.setAcceptThirdPartyCookies(true);
because cookieManager.setAcceptCookie(true);
doesn't work on Lollipop.
回答2:
Have you checked Android documentation ?
If you are using API level >= 21, WebView automatically syncs cookies.
If not try this:
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:
You have to enable javascript and then getting instance of cookie manager accept cookie By using javascriptenable cookie gets stored
webView.getSettings().setJavaScriptEnabled(true); CookieManager.getInstance().setAcceptCookie(true);
回答4:
Oftentimes login requires javascript, try adding this before loadUrl
:
webView.getSettings().setJavaScriptEnabled(true);
回答5:
@Darko.
CookieManager.getInstance()
is the CookieManager instance for your entire application. Hence, you enable or disable cookies for all the webviews in your application.
Normally it should work if your webview is already initialized: http://developer.android.com/reference/android/webkit/CookieManager.html#getInstance()
Maybe you call CookieManager.getInstance().setAcceptCookie(true);
before you initialize your webview.
Thanks,
来源:https://stackoverflow.com/questions/33998688/webview-cannot-accept-cookies