开发中使用webview加载url时,需要带上原生登录的用户信息,所以考虑往cookie中写入,写入cookie的代码如下:
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();
cookieManager.removeAllCookie();
cookieManager.setCookie(url, "userID=" + userID);
cookieManager.setCookie(url, "userIDSign=" + userSign);
cookieManager.setCookie(url, "deviceID=" + deviceID);
cookieManager.setCookie(url, "deviceSign=" + deviceIDsign);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
cookieManager.flush();
} else {
CookieSyncManager.getInstance().sync();
}
这里需要注意一个几个点
1.每次调用setCookie都是增加一个新的cookie,并不会覆盖之前的cookie
2.如上图所示,如果写成这样
cookieManager.setCookie(url, "userID=" + userID
+ ";userIDSign=" + userSign
+ ";deviceID=" + deviceID
+ ";deviceSign=" + deviceIDsign);
这种写法前端页面可能只会读到第一个键-值对,这里需要注意
- 但是如果cookie的key为“SESSION”,在后面追加domain和path,这样写是没有问题的,代码如下:
cookieManager.setCookie(mUrl, "SESSION=" + session
+ ";Domain=xx.xxxxxx.com"
+ ";Path=/");
该规则或许只适用于“SESSION”或者Domain以及Path,如果使用别的自定义key可能无法读取分号后面的其他键值对,
该问题后续需要验证一下,这里只说现象
另外如果不是在app启动时就携带信息,可以使用调用js传参的方式来传递关键信息,比如下面的方式:
webView.loadUrl("javascript:loginSuccess('" + json + "')");
本文章主要是针对此问题记录一下,也希望能帮助小伙伴们少踩坑