美文网首页android开发日常总结
Android http和WebView cookie同步

Android http和WebView cookie同步

作者: aitality | 来源:发表于2018-05-31 13:05 被阅读96次

    在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<Cookie> cookies) {
          //在此保存cookie
        }
        @Override
        public List<Cookie> 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<Cookie> 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同步是很有用的功能,也是日常企业很重要的需求,希望这篇文章对你有所帮助。

    相关文章

      网友评论

        本文标题:Android http和WebView cookie同步

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