需求背景:
做项目中, h5那边需要android端给他们传cookie,所以就需要在webview里面同步cookie信息
设置:
public static final void synchronousWebCookies(@NotNull Context context, @NotNull String url) {
try {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
CookieSyncManager.createInstance(context);
}
CookieManager cookieManager = CookieManager.getInstance();
JMSharedPreferences sp = JMSharedPreferences.getInstance(JMSharedPreferences.APP_COOKIES);
Map<String, ?> cookiesMap = sp.getAll();
cookieManager.setAcceptCookie(true);
Cookie cookie = null;
if (cookiesMap != null) {
for (Map.Entry<String, ?> next : cookiesMap.entrySet()) {
String name = next.getKey();
String value = next.getValue().toString();
URL uri = new URL(url);
cookie = new Cookie.Builder()
.hostOnlyDomain(uri.getHost())
.name(name).value(value)
.build();
//webview内写入cookie
cookieManager.setCookie(url, cookie.name() + '=' + cookie.value() + ";domain="+cookie.domain()+";path=/");
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
cookieManager.flush();
} else {
CookieSyncManager.getInstance().sync();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
domain:请求域名
如请求www.ret.com 则domain就可以写ret.com
但一般不建议写死,可以直接这样取cookie.domain()
path:
表示cookie所在的目录,定义服务器上的路径,默认为/,即根目录
一般如果访问一级域名,只需要将path设置为根目录就可以 即:path=/
注意:
只有cookie的domain和path与请求的URL匹配,这个cookie才是有效的。替换cookie时,要保证替换的Cookie具有相同的 host 、 path、name。