做安卓内嵌H5的项目,每次进入程序获取到的cookie并不是最新的cookie,导致无法自动登录。
在网上找到一种解决办法,每次加载页面完成时手动写入一次cookie:
webView.webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView?, url: String?) {
val cookieManager = CookieManager.getInstance()
//获取最新的cookie
val cookieStr = cookieManager.getCookie(url)
//手动写入cookie
syncCookie(url, cookieStr)
super.onPageFinished(view, url)
}
}
下面是syncCookie方法
/**
* 设置cookies
* 设置必须放在WevSettings设置和webView.loadUrl()方法之前
*/
fun syncCookie(url: String?, cookie: String?): Boolean {
if (cookie == null) {
return false
}
val cookieManager = CookieManager.getInstance()
// 防止不可同时写入多个cookie的写法,以分好分割去掉空格再次拼接,逐个设置
// val cookiesArray=cookie.split(";")
// for(coo in cookiesArray){
// cookieManager.setCookie(url, coo.replace(" ",""))
// Log.e("sssssssssssssssnewcoo", coo.replace(" ",""))
// }
cookieManager.setCookie(url, cookie)
val newCookie = cookieManager.getCookie(url)
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
val cookieSyncManager = CookieSyncManager.createInstance(this)
cookieSyncManager.sync()
} else {
cookieManager.flush()
}
return if (TextUtils.isEmpty(newCookie)) false else true
}
做了以上操作后,每次进入程序执行以下代码就是设置最新的cookies
val cookieManager: CookieManager = CookieManager.getInstance()
val cookie = cookieManager.getCookie(path)
if (cookie != null) {
syncCookie(path, cookie)
}
应该不算是最优解,如果有更好的方法,希望一起分享交流