zoukankan      html  css  js  c++  java
  • Android WebView访问网站携带登录认证Cookies和动态自定义的cookies

    最近项目几个页面要复用微信程序的网页。但是需要调用微网站登录接口,返回Cookies,webview访问需要的网页的时候携带。

    并且还需要几个其他的动态改变的cookie,目的是根据这几个动态自定义cookies来决定网页的内容。如果不传,则显示最原始的网页。

    下面一步一步来记录:

    第一步先调用微信端登录接口,获取默认的三个cookies,即接口的Response的Header中拿到。这个操作自己找个合适的地方·进行:

    List<String> cookies = response.headers("Set-Cookie");  

    拿到后自行存储。 

    第二步,在需要调用webview加载微信端程序网页的时候,在webview加载之前调用这个方法:

    /**
         * 设置cookies
         */
        public void setCookies(){
            CookieManager cookieManager = CookieManager.getInstance();
    
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
                CookieSyncManager.createInstance(getActivity());
            }
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                cookieManager.setAcceptThirdPartyCookies(bindingView.wvHealthGut, true);
            }
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) {
                CookieManager.setAcceptFileSchemeCookies(true);
            }
    
            cookieManager.setAcceptCookie(true);
            cookieManager.removeSessionCookie();
            cookieManager.removeAllCookie();
    
            List<String> cookies = "拿到刚才获取的cookies";
    
            int count = cookies.size();
            for (int i = 0;i < count;i++){
                cookieManager.setCookie("http://xxxx/", cookies.get(i));
            }
    
            cookieManager.setCookie("http://xxxx/", "ChildId=" + childId);// 自自己添加除了上面登录认证的cookies,按照这个格式即可
            cookieManager.setCookie("http://xxxx/", "KindergartenId=" + kindergartenId);
            cookieManager.setCookie("http://xxxx/", "Birthday=" + birthday);
    
            CookieSyncManager.getInstance().sync();
        }

    最后一步:在调用完上面方法之后,设置webview属性。这步如果不设置,那么你传入的自定义的cookies,微信端网页拿到之后你这里的网页是不会刷新的,即你只能显示微信端网页没有数据的时候的样子。

    setCookies();
    // 设置jsEnable属性
            bindingView.wvHealthGut.getSettings().setJavaScriptEnabled(true);// 最后在loadUrl
    bindingView.wvHealthGut.loadUrl(webPath);
  • 相关阅读:
    Chrome 无法登录 GitHub,响应时间过长,可行解决办法
    npm install报错 npm ERR! cb() never called! 检查镜像源!
    Win10 移动文件的时候“卡”在“正在暂停/取消”解决办法
    VS code 彻底关闭插件自动更新功能
    箭头函数 函数中的this指向
    ES6 ES6变量的声明
    范围内的拖拽事件
    div拖拽移动事件
    事件对象的属性 div点击移动事件
    tab切换之循环遍历
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/7472525.html
Copyright © 2011-2022 走看看