美文网首页
android webview同步cookie

android webview同步cookie

作者: S晔枫 | 来源:发表于2017-12-04 13:55 被阅读186次

    接上篇文章 okhttp3 cookie的持久化
    项目中有用到 h5页面, 每次进入时都跳转到登录页面 (坑啊), 后面发现原来 webview没有同步cookie . 哎, 还是太年轻 , 直接上代码

        /*同步cookie*/
        public void synCookies(Context context, String url) {
        //CookieSyncManager负责管理webView中的cookie
        CookieManager cookieManager = CookieManager.getInstance();
        // ==============下面这部很重要=================
       //  根据版本不同,用不同方法刷新删除之前的cookie
        //  根据版本不同,用不同方法刷新cookie
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            cookieManager.flush();
        } else {
             // 清理之前的缓存
            cookieManager.removeSessionCookie();
            cookieManager.removeAllCookie();
            CookieSyncManager.createInstance(this).sync();
        }
       // ===========之前忘了这部  找了半天的bug==========
        cookieManager.setAcceptCookie(true);
        // 获取cookie     
        cookiePersistor = new SharedPrefsCookiePersistor(context);
        List<Cookie> cookieList = cookiePersistor.loadAll();
        for (int i = 0; i < cookieList.size(); i++) {
            Cookie cookie = cookieList.get(i);
            if (cookie.name().equals("token")) {
                cookieManager.setCookie(url, cookie.name() + "=" +   cookie.value());
            }
        }
    }
    调用此方法后, 再   mWv_report.loadUrl(url);   这样调用H5界面时 ,就不会显示登录页面了 .
    

    更新: 上面的方法 部分机型可能无法同步cookie (公司的魅族6测试机就出现无法同步, 其他小米/华为 都没问题) , 后面想到一个办法直接将cookie直接全部设置进去, 看代码

       /*同步cookie*/
    public void synCookies(Context context, String url) {
        //CookieSyncManager负责管理webView中的cookie
        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(true);
        cookieManager.acceptCookie();
        // 获取cookie
        cookiePersistor = new SharedPrefsCookiePersistor(context);
        List<Cookie> cookieList = cookiePersistor.loadAll();
        //  根据版本不同,用不同方法刷新删除之前的cookie
        //  根据版本不同,用不同方法刷新cookie
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
            cookieManager.setAcceptThirdPartyCookies(mWv_report, true);
            cookieManager.removeSessionCookies(null);
            cookieManager.removeAllCookies(null);
            cookieManager.flush();
            String cookies = cookieList.toString();
            // 只截取中间的cookie  主要就是这
            String cookie = cookies.substring(1, cookies.length() - 1);
            cookieManager.setCookie(url,cookie);
        } else {
            // 清理之前的缓存
            cookieManager.removeSessionCookie();
            cookieManager.removeAllCookie();
            CookieSyncManager.createInstance(this).sync();
            for (int i = 0; i < cookieList.size(); i++) {
                Cookie cookie = cookieList.get(i);
                if (cookie.name().equals("token")) {
                    cookieManager.setCookie(url, cookie.name() + "=" + cookie.value());
                }
            }
        }
    

    革命尚未成功, 同志任需努力啊 !!!

    相关文章

      网友评论

          本文标题:android webview同步cookie

          本文链接:https://www.haomeiwen.com/subject/vnntixtx.html