用户登录成功后关闭活动(WebView)

时间:2015-10-14 07:28:03

标签: javascript android login

我制作的Android移动应用程序使用第三方登录页面进行WebView加载的身份验证。当用户输入用户名/密码并提交表单时,它会在用户的设备上保存cookie并将用户重定向到下一页。

我想在这里做的是防止重定向,在将cookie保存到用户的设备后关闭登录活动并向用户显示主要活动。

有什么建议吗?感谢。

4 个答案:

答案 0 :(得分:2)

感谢您的快速解答。我找到了对我有用的解决方案。

正如我在问题中所解释的,在用户输入凭据并成功登录下一页后,在WebView中加载。我所做的是捕获重定向并关闭活动。像这样:

myWebView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.contains("https://www.someservice/nextpage")) {
            Intent i = new Intent(LogInActivity.this,MainActivity.class);
            startActivity(i);
            finish();
        }
        return true;
    }
}

我不确定这是否是最优雅的解决方案,但它很简短,对我有用:)

答案 1 :(得分:1)

对WebView使用单独的活动..

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
    if (url.contains("http://redirectingurl")
        finish();  // close activity
    else
        view.loadUrl(url);

    return true; 
}

我没试过,但我认为这会奏效。 For refernce

答案 2 :(得分:1)

我现在无法发布所有代码,但我会给你一个想法。

Java方法中,您可以在第三方网页中注入一个控制onPageFinished(Webview view, STring url)按钮的javascript文件,如下所示:

login

injection.js

@Override
public void onPageFinished(WebView view, String url) {
    view.loadUrl("javascript:/injection.js content will be here/")

}

并向webView添加JavaScriptInterface:

document.getElementById("loginButton").addEventListener("click", function(){
    //login process copy paste without redirection
    loginMethod()
});

JsInterfaceLogin:

mWebView.addJavascriptInterface(new JsInterfaceLogin(this.getContext()), "MY_APP");

在inject.js中的public class JsInterfaceLogin { private final Context context; public JsInterfaceLogin(Context context) { this.context = context; } @JavascriptInterface public void ___loggedIn___(String toast) { Toast.makeText(context, ""+toast, Toast.LENGTH_SHORT).show(); //When user logged in, you can detect it in here } } 函数中,在登录过程后调用它:

loginMethod()

答案 3 :(得分:0)

用户成功登录后,将关闭登录活动并开始新的活动

工作顺利。...我申请了。

package com.loginsql.afterloginmove;


import android.content.Intent;
import android.os.Bundle;

import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;


public class MainActivity extends AppCompatActivity {


    private WebView webViewLogin;
    private TextView loginTextView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        webViewLogin = findViewById(R.id.myWebView);
        loginTextView = findViewById(R.id.logintext);


        webViewLogin.setWebViewClient(new WebViewClient());
        webViewLogin.setWebChromeClient(new WebChromeClient());

        webViewLogin.getSettings().setJavaScriptEnabled(true);

        webViewLogin.loadUrl("https://myweblogin.com/auth/index");

        webViewLogin.setWebViewClient(new WebViewClient()
        {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (url.contains(url)) {
                    Intent i = new Intent(MainActivity.this, DashboardActivityActivity.class);
                    startActivity(i);
                    finish();

                }
                return true;
            }
        });
    }
}
相关问题