android中將原生請求的介面url的cookie同步到webview中。

weixin_33670713發表於2018-06-21

在我們用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才有效。

相關文章