webview

Android中WebView完整存取Cookie

2016-10-20  本文已影响4701人  zhangzhanghua

最近项目中接触到一个麻烦的登录接口,需要用native方法请求登录接口后,返回的链接列表再请求一遍。照做后发现WebView还是不会自动登录。询问ios同事发现他也是这样做,但是能自动登录。后来我发现了这篇文章【WebView的cookie机制 】轻松搞定WebView cookie同步问题,里面提到“因为Android不会自动同步cookie到WebView。做IOS开发则不用担心这个问题,因为IOS内部已经实现了cookie同步”。

于是我按照他的方式二去实现,发现还是不行。期间我跟后台的同事沟通,用加载JS的方式去解决问题,发现在电脑的浏览器上可以成功,但是在手机浏览器上不成功,进度又回到了原地。

重点来了!!!

通过数据库查看软件打开Cookies发现,保存到数据库里的name-value键值对只保存了一个,而从电脑浏览器看有三个。

问题就出现在取Cookie的时候没有取全,下面是网上取Cookie的方法

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

下面代码是我通过HttpURLConnection取Cookie的方法,其他网络框架的自行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");

}


然后通过CookieManager的setCookie方法把url跟cookie绑定下就好了。

CookieManager cookieManager = CookieManager.getInstance();  

for(String cookie: cookieList) {

cookieManager.setCookie(url, cookie);

}


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

CookieSyncManager.createInstance(context);

在for循环结束后

CookieSyncManager.getInstance().sync();

花了两天终于把这个问题解决了,WebView已经能自动登录。


如有什么错误或者不足的地方,请指正。

上一篇下一篇

猜你喜欢

热点阅读