1

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

我读过关于

  1. 使用 WebView.setHttpAuthUsernameAndPassword
  2. 覆盖 WebViewClient.onReceivedHttpAuthRequest(不触发调用)

但似乎没有一个工作。我已经通过代码路径手动测试,发现如下:

  1. 在调用 WebViewClient.ShouldOverrideUrlLoading 并且我使用 WebView.setHttpAuthUsernameAndPassword 以编程方式设置用户名+密码后,WebViewDatabase.hasHttpAuthUsernameAndPassword 返回 true,但 WebViewDatabase.hasUsernameAndPassword 为 false,用户仍然可以看到登录屏幕
  2. 如果 WebViewDatabase.hasUsernameAndPassword 为真(用户手动输入凭据后),WebViewClient(browser) 似乎甚至没有加载 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);
4

1 回答 1

0

setHttpAuthUsernamePassword()用于 HTTP 身份验证,如基本身份验证或摘要身份验证。Google 帐户登录页面不使用任何这些,因此这不起作用。

你想做什么?您可以从 AccountManager 或新发布的 Google Play Services API 获取 ClientLogin(已弃用)或 OAuth 令牌。有了它,您应该能够登录到几乎任何 Google 服务,而无需用户输入密码。

于 2012-09-27T02:25:22.130 回答