入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

【Android】WebView登录功能-问题与解决办法

创建时间:2017-12-29 投稿人: 浏览次数:399

#:  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。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像