我制作的Android移动应用程序使用第三方登录页面进行WebView加载的身份验证。当用户输入用户名/密码并提交表单时,它会在用户的设备上保存cookie并将用户重定向到下一页。
我想在这里做的是防止重定向,在将cookie保存到用户的设备后关闭登录活动并向用户显示主要活动。
有什么建议吗?感谢。
答案 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;
}
});
}
}