android中将原生请求的接口url的cookie同步到web

2018-06-21  本文已影响29人  背锅TV丶伴奏大师

在我们用webView.loadUrl(url);时一般会遇到判断是否登录的情况,但我们登录请求使用了android原生,那怎么在web网页中也同步登录状态呢,下面我来解释一番。

首先我们http请求时,会有一个请求头(利用抓包工具可以看到),请求头里面会有一个cookie,cookie的值是根据主域名domain而来的,他有一个时效,一般后台默认设置30分钟。所以我们需要拿到原生请求的url的cookie同步给webView.loadUrl(url);的url。下面贴代码。

    syncCookie();//先调用同步cookie
    webView.loadUrl(url);//再调此步骤
    //向webview同步传递cookie
    private synchronized void syncCookie(){
        CookieSyncManager.createInstance(webView.getContext());
        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(true);
        cookieManager.removeAllCookie();
        CookieStore cookieStore = OkGo.getInstance().getCookieJar().getCookieStore();
        HttpUrl httpUrl = HttpUrl.parse(ApiConstant.getUserInfo);
        List<Cookie> cookieList = cookieStore.getCookie(httpUrl);
        for (Cookie cookie:cookieList){
            String[] cookies=cookie.toString().split(";");
            if(cookies!=null){
                for(String c:cookies){
                    //给webview加载的url的domain设置原生请求接口的cookie。
                    cookieManager.setCookie(cookie.domain(), c);
                }
            }
        }
        CookieSyncManager.getInstance().sync();
    }
    //清除Cookie
    private void removeCookie(String url) {
        HttpUrl httpUrl = HttpUrl.parse(url);
        CookieStore cookieStore = OkGo.getInstance().getCookieJar().getCookieStore();
        cookieStore.removeCookie(httpUrl);
    }

注意:我这里使用了okgo的网络请求框架,注意要在Application的onCreate里面配置okgo管理cookie才有效。

上一篇下一篇

猜你喜欢

热点阅读