我正在制作Android移动应用程序,该应用程序使用第三方登录页面进行WebView中加载的身份验证。当用户输入用户名/密码并提交表单时,它会在用户设备上保存cookie并将用户重定向到下一页。成功用户登录后关闭活动(WebView)
我想在这里做的是防止重定向,在cookie被保存到用户设备后关闭登录活动并向用户显示主要活动。
有什么建议吗?谢谢。
我正在制作Android移动应用程序,该应用程序使用第三方登录页面进行WebView中加载的身份验证。当用户输入用户名/密码并提交表单时,它会在用户设备上保存cookie并将用户重定向到下一页。成功用户登录后关闭活动(WebView)
我想在这里做的是防止重定向,在cookie被保存到用户设备后关闭登录活动并向用户显示主要活动。
有什么建议吗?谢谢。
谢谢快速解答。我想出了适合我的解决方案。
正如我在问题中解释的那样,在用户输入凭证并成功登录下一页后,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;
}
}
我不知道这是否是最好的解决方法,但它很短,它为我工作:)
使用一个单独的活动的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
我现在不能发布所有的代码,但我会给你的想法。
在onPageFinished(Webview view, STring url)
方法你可以注入控制在第三方网页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");
JsInterfaceLo杜松子酒:
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()
功能injection.js,登录过程之后,调用此:
window.MY_APP.___loggedIn___("test")
你需要一个沉默登录? –
您知道登录成功后的重定向网址吗? –
已经想通了? –