Android webView cookie无法及时刷新

做安卓内嵌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)
} 

应该不算是最优解,如果有更好的方法,希望一起分享交流

猜你喜欢

转载自blog.csdn.net/go12355/article/details/142878891