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)
} 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值