公司的项目中采用原生加上H5的方式进来开发,遇到的第一个个问题就是给我们的webview设置cookie保存状态。就是将token保存到cookie中去。代码如下:
加载url
@Override
public void loadUrl() {
String index_url = ACache.get(self).getAsString(Config.INDEX_URL);
if (index_url == null) {
return;
}
baseUrl = Url.BASE + index_url;
LogUtil.d("TAG", "baseUrl=" + baseUrl);
syncCookie(baseUrl);
setWebView();
binding.mainWv.loadUrl(baseUrl);
}
将我的token同步到的webView的cookie中
private void syncCookie(String url) {
try {
LogUtil.d("TAG", url);
CookieSyncManager.createInstance(self);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();// 移除
cookieManager.removeAllCookie();
String oldCookie = cookieManager.getCookie(url);
if (oldCookie != null) {
LogUtil.d("TAG", oldCookie);
}
StringBuilder sbCookie = new StringBuilder();
URL urlCookie = new URL(url);
String host = urlCookie.getHost();
String token = ACache.get(self).getAsString(Config.TOKEN);
sbCookie.append("jPowerBOSCookieToken=" + token + ";");
sbCookie.append("domain=" + host + ";");
sbCookie.append("path=/;");
String cookieValue = sbCookie.toString();
cookieManager.setCookie(url, cookieValue);
CookieSyncManager.getInstance().sync();
String newCookie = cookieManager.getCookie(url);
if (newCookie != null) {
LogUtil.e("TAG", "newCookie=" + newCookie);
}
} catch (Exception e) {
LogUtil.e("TAG", e.toString());
}
}
设置webview的属性
private void setWebView() {
WebSettings settings = binding.mainWv.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDefaultTextEncodingName("utf-8");
/**
* 支持内容重新布局
*/
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
/**
* 设置可以访问文件
*/
settings.setAllowFileAccess(true);
/**
* 支持自动加载图片
*/
settings.setLoadsImagesAutomatically(true);
/**
* 支持通过JS打开新窗口
*/
LogUtil.d("TAG", "cacheDirPath=" + cacheDirPath);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
settings.setDomStorageEnabled(true);
settings.setDatabaseEnabled(true);
settings.setAppCachePath(cacheDirPath);
settings.setAppCacheEnabled(true);
binding.mainWv.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
binding.mainWv.addJavascriptInterface(new Contact(), "Android");
binding.mainWv.requestFocus();
binding.mainWv.setWebViewClient(new MyWebViewClient());
binding.mainWv.setWebChromeClient(new MyWebChromeClient());
binding.mainWv.setOnKeyListener(new MyOnKeyListener());
binding.mainWv.setDownloadListener(new MyWebViewDownLoadListener());
}
在webView设置属性之前同步cookie,不然无效