接上篇文章 okhttp3 cookie的持久化
项目中有用到 h5页面, 每次进入时都跳转到登录页面 (坑啊), 后面发现原来 webview没有同步cookie . 哎, 还是太年轻 , 直接上代码
/*同步cookie*/
public void synCookies(Context context, String url) {
//CookieSyncManager负责管理webView中的cookie
CookieManager cookieManager = CookieManager.getInstance();
// ==============下面这部很重要=================
// 根据版本不同,用不同方法刷新删除之前的cookie
// 根据版本不同,用不同方法刷新cookie
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
cookieManager.flush();
} else {
// 清理之前的缓存
cookieManager.removeSessionCookie();
cookieManager.removeAllCookie();
CookieSyncManager.createInstance(this).sync();
}
// ===========之前忘了这部 找了半天的bug==========
cookieManager.setAcceptCookie(true);
// 获取cookie
cookiePersistor = new SharedPrefsCookiePersistor(context);
List<Cookie> cookieList = cookiePersistor.loadAll();
for (int i = 0; i < cookieList.size(); i++) {
Cookie cookie = cookieList.get(i);
if (cookie.name().equals("token")) {
cookieManager.setCookie(url, cookie.name() + "=" + cookie.value());
}
}
}
调用此方法后, 再 mWv_report.loadUrl(url); 这样调用H5界面时 ,就不会显示登录页面了 .
更新: 上面的方法 部分机型可能无法同步cookie (公司的魅族6测试机就出现无法同步, 其他小米/华为 都没问题) , 后面想到一个办法直接将cookie直接全部设置进去, 看代码
/*同步cookie*/
public void synCookies(Context context, String url) {
//CookieSyncManager负责管理webView中的cookie
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.acceptCookie();
// 获取cookie
cookiePersistor = new SharedPrefsCookiePersistor(context);
List<Cookie> cookieList = cookiePersistor.loadAll();
// 根据版本不同,用不同方法刷新删除之前的cookie
// 根据版本不同,用不同方法刷新cookie
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
cookieManager.setAcceptThirdPartyCookies(mWv_report, true);
cookieManager.removeSessionCookies(null);
cookieManager.removeAllCookies(null);
cookieManager.flush();
String cookies = cookieList.toString();
// 只截取中间的cookie 主要就是这
String cookie = cookies.substring(1, cookies.length() - 1);
cookieManager.setCookie(url,cookie);
} else {
// 清理之前的缓存
cookieManager.removeSessionCookie();
cookieManager.removeAllCookie();
CookieSyncManager.createInstance(this).sync();
for (int i = 0; i < cookieList.size(); i++) {
Cookie cookie = cookieList.get(i);
if (cookie.name().equals("token")) {
cookieManager.setCookie(url, cookie.name() + "=" + cookie.value());
}
}
}
革命尚未成功, 同志任需努力啊 !!!