2015-10-14 50 views
1

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

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

有什么建议吗?谢谢。

+0

你需要一个沉默登录? –

+0

您知道登录成功后的重定向网址吗? –

+0

已经想通了? –

回答

1

谢谢快速解答。我想出了适合我的解决方案。

正如我在问题中解释的那样,在用户输入凭证并成功登录下一页后,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)方法你可以注入控制在第三方网页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")