Xamarin Android在登录和cookie后获得当前URL

时间:2018-03-24 23:06:42

标签: c# android xamarin webview android-emulator

之前曾问过这个问题,但没有给出正确的工作答案。

Android - extracting cookies after login in webview

我的问题有很多子部分:( visual studio 2017 Android Emulator API25)

1 - 我需要连接一个网址../signin,将我重定向到Office365登录。 之后它会把我送到../login。

2-我需要在../login重定向后获取office365 / backend提供的cookie。 (在iOS中你不需要声明url来获取cookie,但在android中你必须)(How do I access cookies in a Xamarin WebView?

3- ../signin有HTTPS,但我的webview元素无法打开网站。但是,我可以打开谷歌,脸书等。我收到不受信任的SSL错误。从我的笔记本电脑,我可以连接到该网址。

4-虽然它实际上是iOS的2-3行代码,但对于android我无法找到任何结果。我需要在重定向后获取当前的webview网址。但是,webview.URL仅返回webview.loadURl(String url)的初始给定网址,尽管它不是当前网址。

5-我搜索了webview.onPageFinished(WebView webview,String URL)以便输入当前网址,并检查它是否为../login rightnow。所以我可以得到饼干。 iOS有onPageFinished事件监听器,但Android没有。

继承我的代码:

        WebView wv = new WebView(this);
        SetContentView(wv);
        wv.SetWebViewClient(new WebViewClient());
        wv.LoadUrl("../signin");
        wv.Settings.JavaScriptEnabled = true;

        var client = new WebViewClient();
        wv.SetWebViewClient(new WvClient(this, wv));

for onPageListener

    public class WvClient : WebViewClient
{
    public Activity mActivity;
    public WvClient(Activity mActivity,WebView wv)
    {
        this.mActivity = mActivity;
        onPageFinished(wv,wv.Url);
    }
    public void onPageFinished(WebView wv, String url)
    {


        var cookieHeader = CookieManager.Instance.GetCookie(wv.Url);//This is how I will get the cookie.
    }

    public void onReceivedSslError(WebView view, SslErrorHandler handler, Android.Net.Http.SslError er)
    {
        handler.Proceed();// Ignore SSL certificate errors
    }
}

谢谢!

1 个答案:

答案 0 :(得分:0)

您应该覆盖这些方法。然后你可以在重定向之后获得webview的每个URL。

例如:

        public override void OnPageFinished(WebView view, string url)
        {              
            var cookieHeader = CookieManager.Instance.GetCookie(view.Url);
            base.OnPageFinished(view, url);
        }

        public override void OnReceivedSslError(WebView view, SslErrorHandler handler, SslError error)
        {
            handler.Proceed();
        }