Android Webview设置HttpAuthUserName和Password与Google登录无效

Android Webview设置HttpAuthUserName和Password与Google登录无效,android,webview,passwords,Android,Webview,Passwords,我是Android开发的新手,需要实施这个活动,这样嵌入式Webview就能够登录到Google帐户登录,而不需要用户首先手动输入用户名和密码。我在参加活动时有用户名和密码。我不应该使用AccountManager,因为它现在有另一个线程 我读过 使用WebView.SetHttpAuthUserName和Password 重写WebViewClient.OnReceiveDhtPauthRequest不会触发调用 但似乎都不管用。我已经通过代码路径进行了手动测试,发现如下: 在调用WebVie

我是Android开发的新手,需要实施这个活动,这样嵌入式Webview就能够登录到Google帐户登录,而不需要用户首先手动输入用户名和密码。我在参加活动时有用户名和密码。我不应该使用AccountManager,因为它现在有另一个线程

我读过

使用WebView.SetHttpAuthUserName和Password 重写WebViewClient.OnReceiveDhtPauthRequest不会触发调用 但似乎都不管用。我已经通过代码路径进行了手动测试,发现如下:

在调用WebViewClient.ShouldOverrideUrlLoading并使用WebView.SetHttpAuthUserName和password以编程方式设置用户名+密码后,WebViewDatabase.HashttpAuthUserName和password返回true,但WebViewDatabase.HasUserName和password为false,用户仍然可以看到登录屏幕 如果用户手动输入凭据后WebViewDatabase.hasUserName和Password为true,则WebViewClientbrowser似乎甚至没有加载Google登录url并直接转到回调url 有人能提供一些见解吗

下面是我设置webview和webviewclient时的代码部分:

final WebView browser = (WebView) findViewById(R.id.browser);   
WebViewClient webViewClient = new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if(url.contains(ACCOUNT_LOGIN_SERVICE_PREFIX)){
                WebViewDatabase webviewDb = WebViewDatabase.getInstance(getBaseContext());
                if(!webviewDb.hasHttpAuthUsernamePassword()){
                    view.setHttpAuthUsernamePassword(
                            "accounts.google.com", 
                            "", 
                            "mygmail@gmail.com", 
                            "mypassword");

                    view.loadUrl(url);
                }
                return super.shouldOverrideUrlLoading(view, url);
            }
        }
    };

browser.setWebViewClient(webViewClient);
browser.loadUrl(INSTALLED_APP_OAUTH);
setHttpAuthUsernamePassword用于HTTP身份验证,如基本身份验证或摘要身份验证。谷歌账户登录页面不使用任何这些,所以这是行不通的


你想干什么?您可以从AccountManager或新发布的Google Play Services API获得一个不推荐使用的ClientLogin或OAuth令牌。这样,你就可以登录到几乎所有的谷歌服务,而不需要用户输入密码

谢谢。我得到了谷歌播放API。我想做的是通过Google帐户服务登录,无论是WS-Endpoint还是本机Adroid AccoundManager,而不需要用户键入用户名和密码。在基于web的版本中,我通过添加一些JavaScriptInterface来遍历dom并以userAgent的身份登录,解决了这个问题,但这似乎有点骇人听闻。理想的情况是通过编程将帐户添加到本机Android AccountManager,然后使用Play API获取令牌。如果无法通过编程将Google帐户添加到AccountManager,用户需要通过向导添加一个。如果已经安装了一个,您可以获得令牌并登录。