当app原生项目登录时,跳转到h5界面需要将登录状态同步到h5里,这时需要将cookie设置给webview同步登录状态。具体代码如下:
1 设置cookie前 设置支持js脚本
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);// 支持javaScript脚本
webSettings.setDomStorageEnabled(true);
webSettings.setBuiltInZoomControls(true);
2 设置同步cookie
public void synCookies(final String url) {
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeAllCookie();//移除之前所有的cookie
// 获取自己存下的cookie
String[] cookies = ReaderApplication.getInstance().getHttpCookies().split(";");
LogUtil.logd("cookie", "length=" + cookies.length);
for (int i = 0; i < cookies.length; i++) {
String cookie = cookies[i] + ";Max-Age=93600;Domain=.ruochu.com;Path=/";
LogUtil.logd("cookie", cookie);
cookieManager.setCookie(url, cookie);
}
// 5.0以上 刷新cookie
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
cookieManager.flush();
SystemClock.sleep(100);
} else { // 5.0以下
CookieSyncManager.createInstance(this.getApplicationContext());
CookieSyncManager.getInstance().sync();
}
Log.e("flag", "------------------------同步---getCookie:" + cookieManager.getCookie(url));
}
3 请求url
webView.loadUrl(this.getLoadUrl());
注意点:
1 设置cookie 前移除之前的
cookieManager.removeAllCookie();//移除之前所有的cookie
2 拼接cookie 域名时 要对应请求的url里的域名 假设请求是 https://mp.csdn.net/postedit
cookies[i] + ";Max-Age=93600;Domain=.csdn.net;Path=/";
Domain后设置 和请求url一样的域名 不过不用包含服务器名 即Demain=.csdn.net即可
3 设置多条cookie时 要 cookieManager.setCookie(url, cookie); set多次,,不能set一次用;分开,否则会检测到;认为设置完毕,导致设置cookie失效
4 同步cookie 时 区别安卓版本