Android 使用WebView实现登录流时出现的问题

Android 使用WebView实现登录流时出现的问题,android,Android,我在使用webview进行登录流时遇到一些问题。如果用户只需在最初打开的页面上输入信息,一切都会正常工作。我得到一个对onPageFinished的回调,然后从URL中提取一个令牌并从那里继续。但是如果在最初打开的页面上,用户点击使用facebook登录,那么他们会被重定向到facebook的登录页面,我甚至会在onPageFinished中收到这个URL加载的回调。但是,如果用户以这种方式导航到FB,那么我在onPageFinished中执行的其他异步调用将不会执行。如果他们立即输入登录凭据,

我在使用webview进行登录流时遇到一些问题。如果用户只需在最初打开的页面上输入信息,一切都会正常工作。我得到一个对onPageFinished的回调,然后从URL中提取一个令牌并从那里继续。但是如果在最初打开的页面上,用户点击使用facebook登录,那么他们会被重定向到facebook的登录页面,我甚至会在onPageFinished中收到这个URL加载的回调。但是,如果用户以这种方式导航到FB,那么我在onPageFinished中执行的其他异步调用将不会执行。如果他们立即输入登录凭据,一切都很好。有了FB,一切都停止了。没有相关日志,没有任何类型的崩溃。下面让您了解这一切是什么样子的我知道下面的内容甚至不是有效的Java,也不会编译,但我只是用它来说明:

SomeAwesomeName extends Fragment {

    View onCreateView {
        Webview webView = new WebView;
        webview.setWebViewClient(new MyClient)
        return webiew;
    }

    class MyClient extends WebViewClient {
     onPageFinished(String url) {
        if(url.contains("/user/login/done")) { //user hit login on the initially opened page and we're good
            //grab a token from that url and do some asynchronous call
            SomeClass.fetchSomethingAsync("what to fetch", new CallBack() {
                void done(data) {
                    startActivity(new Intent("bla bla"))
                    getActivity.finish
                }
            })
        }
     }
    }

}
我意识到上面的内容可能有点混乱,所以让我将问题总结如下:在所有情况下,当我们指向包含user/login/done的URL时,登录流结束。无论用户选择使用其电子邮件/密码还是决定使用facebook,登录流始终在同一位置结束

流量只能是以下两种可能性之一:

第一种可能是这种方法有效 片段变为可见->WebView加载URL->用户使用电子邮件/密码登录->调用onPageFinished->提取令牌->触发onPageFinished内部的异步调用,并在调用回调时启动新活动

第二种可能性 片段变为可见->WebView加载URL->用户单击以使用FaceBook登录,该登录重定向到FB->onPageFinished被称为->提取令牌->然后。。。没什么

这里唯一的区别是,用户在网页方面导航更深一层。除此之外,我不知道到底发生了什么。事实上,onPageFinished实际上是在FB登录成功后调用的,这让我更加陌生。调用onPageFinished,我可以从传递给我的URL获取令牌,但是onPageFinished就像停止执行一样。应用程序没有遇到ANR或崩溃,日志中也没有任何可疑之处

编辑

我现在看到在onPageStarted中传递给我的一个URL包含:

Ferror_原因%3Duser_被拒绝%26错误%3Daccess_被拒绝%26错误描述%3%2用户%2被拒绝%2您的%2请求

所以webview/webviewclient出现了一些奇怪的情况。有什么想法吗

编辑

即使存在FB user denied access错误,我连接到的与FB接口以处理登录的webservice实际上也能够为FB检索令牌。在日志中,我看到FB错误,然后重定向回webservice,返回到user/login/done?token=FACEBOOK\u token\u


但我似乎仍然无法在onPageFinished中继续执行,以便开始新的活动。我甚至尝试过在新线程中执行所有操作,或者发布一个runnable到getActivity.runOnUiThread,但似乎都没有帮助。

只是一个想法,不确定是否有用。您是否尝试在onPageStarted重定向时捕获要解析的url?另外,您是否在webview上下文之外的单独线程中进行处理?如果不这样做,有时会导致问题。@ThumbsDP很好。如何确保我不在webview上下文中?只是新建线程新建可运行?@ThumbsDP,我已经编辑了我的问题。事实上,我现在看到FB认为用户拒绝了请求的新问题。您是否为webview启用了javascript和cookie?这可能会导致身份验证问题。我启用了javascript,是的。如何启用cookies?