15

我正在创建一个基于 WebView 的 Android 应用程序,使用户能够登录到移动运营商。当我运行应用程序时,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;
}
4

5 回答 5

8

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.

于 2015-12-08T02:23:04.307 回答
3

您检查过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;
    }
于 2015-12-04T08:17:09.927 回答
3

您必须启用 javascript,然后获取 cookie 管理器的实例接受 cookie 通过使用 javascriptenable cookie 被存储

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

于 2015-12-09T06:48:16.227 回答
0

@达科。

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

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

也许你CookieManager.getInstance().setAcceptCookie(true);在初始化你的 webview 之前打电话。

谢谢,

于 2015-12-09T05:43:26.333 回答
0

通常登录需要javascript,请尝试在之前添加loadUrl

webView.getSettings().setJavaScriptEnabled(true);

于 2015-12-09T00:05:57.077 回答