Webview无法接受Cookies。

15

我正在创建一个基于WebView的Android应用程序,使用户可以登录到移动运营商。当我运行该应用程序时,WebView打开网站,但是我收到了一条消息,提示WebView不允许cookies。我尝试了在这里找到的各种代码,但都没有起作用。有谁能帮助我吗?这是我正在使用的代码:

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

您收到的有关Webview不允许Cookie的确切消息是什么?您是在UI上看到它作为警报还是在logcat中看到消息,还是其他地方? - keno
@keno 我从他们的网站收到一条消息,说 cookies 不可用。 - Darko Petkovski
5个回答

8
尝试重写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); 不起作用。


3

您需要启用JavaScript,然后获取cookie管理器实例并接受cookie。通过使用JavaScript启用cookie会被存储。

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


3

你查看过 Android文档 了吗?

如果你使用的API级别 >= 21,WebView会自动同步cookies。

如果不是,请尝试以下方法:

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

获取Cookies:

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

你能否尝试一下,将setAcceptCookie更改为setAcceptThirdPartyCookies(webView, true)? - Alper Cem Polat

0
通常登录需要使用JavaScript,尝试在loadUrl之前添加以下代码:

webView.getSettings().setJavaScriptEnabled(true);


0

@Darko。

CookieManager.getInstance() 是您整个应用程序的 CookieManager 实例。因此,您可以为应用程序中的所有 Web 视图启用或禁用 cookie。

如果您的 Web 视图已经初始化,通常情况下它应该可以工作:http://developer.android.com/reference/android/webkit/CookieManager.html#getInstance()

也许您在初始化 Web 视图之前调用了 CookieManager.getInstance().setAcceptCookie(true);

谢谢,


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接