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が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);
4

1 に答える 1

0

setHttpAuthUsernamePassword()基本認証やダイジェスト認証などの HTTP 認証用です。Google アカウントのログイン ページはこれらのいずれも使用しないため、これは機能しません。

あなたは何をしようとしているのですか?AccountManager または新しく発表された Google Play Services API から ClientLogin (非推奨) または OAuth トークンを取得できます。これにより、ユーザーがパスワードを入力しなくても、ほぼすべての Google サービスにログインできるようになります。

于 2012-09-27T02:25:22.130 に答える