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

问题描述 投票:2回答:4

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

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

有什么建议吗?谢谢。

javascript android login
4个回答
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
投票

对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


1
投票

我现在无法发布所有代码,但我会告诉你。

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

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

}

injection.js

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

并将JavaScriptInterface添加到webView:

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

JsInterfaceLogin:

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
    }
}

并且在injection.js的loginMethod()函数中,在登录过程后调用此函数:

window.MY_APP.___loggedIn___("test")

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;
            }
        });
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.