Android 同步cookie到webView,区分系统版本

当app原生项目登录时,跳转到h5界面需要将登录状态同步到h5里,这时需要将cookie设置给webview同步登录状态。具体代码如下:

1 设置cookie前 设置支持js脚本

  WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);// 支持javaScript脚本
    webSettings.setDomStorageEnabled(true);
    webSettings.setBuiltInZoomControls(true);

2 设置同步cookie

   public void synCookies(final String url) {
    CookieManager cookieManager = CookieManager.getInstance();
    cookieManager.setAcceptCookie(true);
    cookieManager.removeAllCookie();//移除之前所有的cookie
    // 获取自己存下的cookie  
    String[] cookies = ReaderApplication.getInstance().getHttpCookies().split(";");
    LogUtil.logd("cookie", "length=" + cookies.length);
    for (int i = 0; i < cookies.length; i++) {
      String cookie = cookies[i] + ";Max-Age=93600;Domain=.ruochu.com;Path=/";
      LogUtil.logd("cookie", cookie);
      cookieManager.setCookie(url, cookie);
    }
    // 5.0以上 刷新cookie
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
      cookieManager.flush();
      SystemClock.sleep(100);
    } else { // 5.0以下
      CookieSyncManager.createInstance(this.getApplicationContext());
      CookieSyncManager.getInstance().sync();
    }
    Log.e("flag", "------------------------同步---getCookie:" + cookieManager.getCookie(url));
  }

3 请求url

 webView.loadUrl(this.getLoadUrl());

注意点:

1 设置cookie 前移除之前的  

 cookieManager.removeAllCookie();//移除之前所有的cookie
2  拼接cookie 域名时 要对应请求的url里的域名  假设请求是  https://mp.csdn.net/postedit 
cookies[i] + ";Max-Age=93600;Domain=.csdn.net;Path=/";

Domain后设置 和请求url一样的域名   不过不用包含服务器名   即Demain=.csdn.net即可

3 设置多条cookie时  要  cookieManager.setCookie(url, cookie);    set多次,,不能set一次用;分开,否则会检测到;认为设置完毕,导致设置cookie失效

4 同步cookie 时 区别安卓版本


扫描二维码关注公众号,回复: 1926495 查看本文章


猜你喜欢

转载自blog.csdn.net/xuwb123xuwb/article/details/80405181
今日推荐