Android中WebView完整存取Cookie

最近項(xiàng)目中接觸到一個(gè)麻煩的登錄接口,需要用native方法請(qǐng)求登錄接口后,返回的鏈接列表再請(qǐng)求一遍。照做后發(fā)現(xiàn)WebView還是不會(huì)自動(dòng)登錄。詢(xún)問(wèn)ios同事發(fā)現(xiàn)他也是這樣做,但是能自動(dòng)登錄。后來(lái)我發(fā)現(xiàn)了這篇文章【W(wǎng)ebView的cookie機(jī)制 】輕松搞定WebView cookie同步問(wèn)題,里面提到“因?yàn)锳ndroid不會(huì)自動(dòng)同步cookie到WebView。做IOS開(kāi)發(fā)則不用擔(dān)心這個(gè)問(wèn)題,因?yàn)镮OS內(nèi)部已經(jīng)實(shí)現(xiàn)了cookie同步”。

于是我按照他的方式二去實(shí)現(xiàn),發(fā)現(xiàn)還是不行。期間我跟后臺(tái)的同事溝通,用加載JS的方式去解決問(wèn)題,發(fā)現(xiàn)在電腦的瀏覽器上可以成功,但是在手機(jī)瀏覽器上不成功,進(jìn)度又回到了原地。

重點(diǎn)來(lái)了?。?!


通過(guò)數(shù)據(jù)庫(kù)查看軟件打開(kāi)Cookies發(fā)現(xiàn),保存到數(shù)據(jù)庫(kù)里的name-value鍵值對(duì)只保存了一個(gè),而從電腦瀏覽器看有三個(gè)。

問(wèn)題就出現(xiàn)在取Cookie的時(shí)候沒(méi)有取全,下面是網(wǎng)上取Cookie的方法

String cookieStr = conn.getHeaderField("Set-Cookie");

下面代碼是我通過(guò)HttpURLConnection取Cookie的方法,其他網(wǎng)絡(luò)框架的自行Google。

URL url =new URL(url);

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setRequestMethod("GET");

conn.connect();

if(conn.getResponseCode() == HttpURLConnection.HTTP_OK) {

Map<String, List<String>> headFields = conn.getHeaderFields();

List<String> cookieList = headFields.get("Set-Cookie");

}


然后通過(guò)CookieManager的setCookie方法把url跟cookie綁定下就好了。

CookieManager cookieManager = CookieManager.getInstance();??

for(String cookie: cookieList) {

cookieManager.setCookie(url, cookie);

}


如果API是21以下的話,需要在CookieManager前

CookieSyncManager.createInstance(context);

在for循環(huán)結(jié)束后

CookieSyncManager.getInstance().sync();

花了兩天終于把這個(gè)問(wèn)題解決了,WebView已經(jīng)能自動(dòng)登錄。


如有什么錯(cuò)誤或者不足的地方,請(qǐng)指正。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容