在我们用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才有效。
网友评论