我是 Android 开发的新手,需要实现该活动,以便嵌入式 Webview 能够登录到 Google 帐户登录,而无需用户首先手动输入用户名和密码。进入活动时我确实有用户名和密码。我不应该使用 AccountManager,因为现在有另一个线程。
我读过关于
- 使用 WebView.setHttpAuthUsernameAndPassword
- 覆盖 WebViewClient.onReceivedHttpAuthRequest(不触发调用)
但似乎没有一个工作。我已经通过代码路径手动测试,发现如下:
- 在调用 WebViewClient.ShouldOverrideUrlLoading 并且我使用 WebView.setHttpAuthUsernameAndPassword 以编程方式设置用户名+密码后,WebViewDatabase.hasHttpAuthUsernameAndPassword 返回 true,但 WebViewDatabase.hasUsernameAndPassword 为 false,用户仍然可以看到登录屏幕
- 如果 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);