私はAndroid開発に不慣れであり、ユーザーが最初にユーザー名とパスワードを手動で入力しなくても、組み込みのWebviewがGoogleアカウントログインにログインできるようにアクティビティを実装する必要があります。アクティビティに参加するとき、私はユーザー名とパスワードを持っています。現在、別のスレッドがあるため、AccountManagerを使用することは想定されていません。
私はについて読んだ
- WebView.setHttpAuthUsernameAndPasswordを使用する
- WebViewClient.onReceivedHttpAuthRequestをオーバーライドします(呼び出しを起動しません)
しかし、どれも機能していないようです。私はコードパスを介して手動でテストし、以下を見つけました:
- WebViewClient.ShouldOverrideUrlLoadingが呼び出され、WebView.setHttpAuthUsernameAndPasswordを使用してユーザー名とパスワードをプログラムで設定した後、WebViewDatabase.hasHttpAuthUsernameAndPasswordはtrueを返しますが、WebViewDatabase.hasUsernameAndPasswordはfalseであり、ユーザーには引き続きログイン画面が表示されます。
- WebViewDatabase.hasUsernameAndPasswordがtrueの場合(ユーザーが手動でクレデンシャルを入力した後)、WebViewClient(ブラウザ)は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);