【Android】WebView登录功能-问题与解决办法
#: WebView登录功能
在WebView登录功能,无非是以下三个步骤。
1.加载登录界面2.输入后用户名密码,登录成功之后拦截登录成功URL
3.获取登录成功后的数据,登录完成
当然还有一些完善功能需要做的事:
mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); mCookieManager = CookieManager.getInstance(); mCookieManager.setAcceptCookie(true); mCookieManager.setAcceptThirdPartyCookies(mWebView, true); mWebView.loadUrl(CustomConstants.CGI_URL);
mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
//插入获取记住密码Checkbox状态 JS
view.loadUrl("javascript:" + "function getSaveAccount() {
" +
" var ck = document.getElementById("persistent");
" +
" return ck.checked;
" +
" }");
super.onPageFinished(view, url);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//todo 在此处判断登录成功后跳转
LogUtil.d(TAG, "LOAD URL:" + url);
return false;
}
//加载失败时
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
//todo 错误dialog等处理
}
});
CookieManager cookieManager = CookieManager.getInstance(); String CookieStr = cookieManager.getCookie(url); cookieManager.setCookie(url, CookieStr);CookieStr中就是登陆成功的Cookie
boolean mIsSavePass;
mWebView.evaluateJavascript("javascript:getSaveAccount()", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
mIsSavePass = value.equals("true");
}
});
例如: /**
* 记住密码
*
* @param cookie Cookie
*/
public void deleteAccountFromCookie(String cookie) {
if (cookie != null) {
String[] strings = cookie.split(";");
for (String strCookie : strings) {
strCookie = strCookie.trim();
//清除登录状态
if (!StringUtils.isEmpty(strCookie) && !strCookie.startsWith("spsp") && !strCookie.startsWith("spsp2_test")) {
//记住密码
String mSecondAuth = "g_smt_omitbrowser";
if (mIsSaveSavePass) {
mCookieManager.setCookie(CustomConstants.CGI_URL, strCookie);
} else {
String mUserAccount = "IDF_UID";
if (!StringUtils.isEmpty(strCookie) && !strCookie.startsWith(mUserAccount)) {
mCookieManager.setCookie(CustomConstants.CGI_URL, strCookie);
}
}
}
}
}
}
此处“IDF_UID”是保存用户名密码的Cookie
到这里第五步的问题也解决了(“spsp”和“spsp2_test”是保存登陆状态的cookie)
最后还有一些调查途中的小技巧来分享给大家:声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇:没有了
