android同步http请求,Android http和WebView cookie同步

在Android中http请求的cookie是放在Header中的通过“Set-Cookie”来设置的,而WebView的cookie是在本地私有的数据库中保存着的,换句话说,这两个就是在不同的世界,但是对于cookie来说,又是通用的。问题来了,怎么让二者保持一致呢?使用场景一:

如果APP处于登录状态,打开H5页面发现竟然还要再登录,这种情况是不是很尴尬!

使用场景二:

当你想统计做个活动会产生多少有效用户数据的时候,你会惊奇的发现,数据链在进入h5后就断掉了。

那么该如何解决这个问题呢?今天就来总结一下。

SETP1:需要有自己的一套管理cookie逻辑

管理cookie的事只有交给自己处理,才有可能让http请求和webView的cookie进行同步,具体实现略;

STEP2:如何从http请求中获取cookie?将cookie注入请求header中?

在此以第三方框架OKHTTP3.0为例public class HttpCookieManager implements CookieJar {

@Override

public void saveFromResponse(HttpUrl url, List cookies) {

//在此保存cookie

}

@Override

public List loadForRequest(HttpUrl url) {

//在此注入cookie

return list;

}

}

STEP3:如何从WebView中读取cookie?public class MyWebViewClient extends WebViewClient {

public void onPageFInish(WebView view, String url){

CookieManager cookieManager = CookieManager.getInstance();

String cookies = cookieManager.getCookie(url);

//判断一下是否真的取到值

String[] cookiesArray = cookies.split(";");

//保存cookie

}

}

STEP4:如何将cookie注入到webView中?//在webView.loadUrl(url)之前调用此方法,否则无效

public void syncCookie(Context context, String url){

CookieSyncManager.createInstance(context);

CookieManager cookieManager = CookieManager.getInstance();

cookieManager.setAcceptCookie(true);

cookieManager.removeSessionCookie();

List cookieList = HttpCookieManager.getInstance().loadForRequest(HttpUrl.parse(url));

for(Cookie cookie : cookieList){

//Tips:有多个cookie的时候必须设置多次,否则webView只读第一个cookie

cookieManager.setCookie(url, cookie.toString());

}

cookieManager.setCookie(url, AccountManager.readUserCookie());

CookieSyncManager.getInstance().sync();

}

总结

cookie同步是很有用的功能,也是日常企业很重要的需求,希望这篇文章对你有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值