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

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

下面一步一步来记录:

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

List 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 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);

 

相关文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。