首页 > 解决方案 > 在android中通过WebView处理用户登录

问题描述

我已经在我的 android 应用程序中实现了一个 Webview,并且第一次,用户应该登录(在 Webview 中加载的服务器端实现的登录页面)。因此,我想知道如何在 Webview 中检查是否成功登录,以决定重定向到客户端的另一个片段。

标签: android

解决方案


您可以在成功登录时拦截 URL 重定向shouldOverrideUrlLoading并获取 cookie/令牌

public class WebViewActivity extends Activity {
WebView webView;
public static final String TAG = WebViewActivity.class.getSimpleName();

@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setResult(Activity.RESULT_OK, null);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_sso);
    String url = getIntent().getStringExtra(URL);
    webView = findViewById(R.id.webview);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setSupportZoom(false);
    webView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            try {
                // If coming from our system, then we need to check the cookie for username password
                if (url.contains("Your_url")) {
                    String cookie = getCookie(url, "COOKIE_NAME");
                    //pass the data from your webview login to your Activity 
                    setResult(LoginActivity.SSO_ACTIVITY_RESULT, null);
                    WebViewActivity.this.finish();
                    return true;
                }
            } catch (Exception ex) {
                setResult(Activity.RESULT_CANCELED, null);
                WebViewActivity.this.finish();
            }

            return false;
        }

    });

    try {
        webView.loadUrl(url);
    } catch (Exception ex) {
        Log.e(TAG, ex.getMessage());
    }

}

private String getCookie(String url, String cookieName) {
    String CookieValue = null;
    CookieManager cookieManager = CookieManager.getInstance();
    String cookies = cookieManager.getCookie(url);
    String[] temp = cookies.split(";");
    for (String ar1 : temp) {
        if (ar1.contains(cookieName)) {
            CookieValue = ar1;
            break;
        }
    }
    return CookieValue;
}

}


推荐阅读