目录

使用场景问题描述思路分析解决方案结语

使用场景

  当我们在实现原生App使用Webview打开网页时候,即Android嵌套H5页面,如果用户已经在我App登录过,这时候再让用户进行一次登录操作,就会造成一种非常不友好的用户体验。那么,我们应该如何去实现无需二次登录这个问题呢?

问题描述

  App只是一个“壳”的作用,由于登录功能是在H5中实现的,所以希望实现用户第一次登录后,关闭App或者过段时间再次打开App的时候,我们希望它会自动跳过登录这个步骤。即验证我们已经登录过,无需重复登录。现在市面上的大部分应用,都是这种实现,比如某宝、某东等。下面请看大致思路实现!

思路分析

  我们可以将H5的登录信息,比如token等信息,通过Android的CookieSyncManager和CookieManager实现H5的登录信息进行同步和保存到手机中储存,类似于浏览器的cookie缓存一样,也就是保存H5用户登录的信息,进行一个同步,

解决方案

  根据上述的思路分析,我们可以在Android的webView.setWebViewClient里面的onPageFinished这个方法中实现,具体源码参考下面:

//获取H5的token设置缓存

CookieSyncManager.createInstance(MainActivity.this);

//保留cookies,而不是在随后的重新启动后清除

CookieManager cookieManager = CookieManager.getInstance();

// 允许接受 Cookie

cookieManager.setAcceptCookie(true);

// 设置webView支持JS的Cookie的调用,5.0以上才要设置

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

// 跨域cookie读取

cookieManager.setAcceptThirdPartyCookies(view, true);

}

//移除Cookie

//cookieManager.removeAllCookie();

String val = cookieManager.getCookie(url);

System.out.println("H5 cookie:" + val);

String urlDecoder = URLEncodeing.toURLDecoder(val);

// 向WebView中添加Cookie,一定要给主域设置cookie,给子级地址设置,父级会无法获取到cookie值

cookieManager.setCookie(url, urlDecoder);

// 刷新,同步

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {

CookieManager.getInstance().flush();

}

CookieSyncManager.getInstance().sync();

//验证是否将cookie同步进去

//String newCookie = cookieManager.getCookie(url);

//System.out.println("newCookie:" + newCookie);

  到此就完成了,重新执行app安装,你就会发现App登录过后,无论是关闭后二次打开,还是隔断时间再次打开,都无需进行登录即可进入App主页,赶紧去试试吧!祝“码”到成功!

结语

  此方案仅供参考,你可以根据自行的项目需求进行优化,具体实现多久重新登录一次,这个问题可以从token中设定,即你的token有效期!

创作不易,感谢您的点赞与支持。

查看原文