> 製作中のWebViewを使ったアプリでBasic認証を行なっているのですが、
Android 2.3.* 端末では
> なんの問題もなく、サーバー側でもBasic認証が行われていることを確認でき
ているのですが、
> GALAXY NEXUS(Android 4.0.2)ではBasic認証のユーザー名とパスワードが無
くなっている
> ようなのです。
無くなっているという部分をきちんと理解したいのですが、どのような状況で
しょうか。
・Eclipseでエラーが出る
・Eclipseではエラーは出ないが、Basic認証が出来ない
サーバーからのレスポンスはどのようになっていますか。または、プログラム
実行中に例外が出ていませんか?
--
Keiji,
ml_an...@c-lis.co.jp
401 と言うことは、認証に失敗していると言うことですね。。。
こちらで同様の現象が発生していないのでこれという原因がわからないのです
が、AuthScopeのあたりが怪しいのではないかと考えています。
>> HttpGet method = new HttpGet( domain + "?" + params );
変数domainの中身は、ドキュメントを見る限りパスを含まないhost名という理
解ですが、ここに余計な文字列が入ったりしていないでしょうか。
AuthScope
http://developer.android.com/reference/org/apache/http/auth/AuthScope.html
CredentialsProviderには大きな変更がないようなので、AuthScopeと
Credentialはきちんと登録されているように思えます。
登録は出来ても、アクセス先のhostやポートその他とAuthScopeが適合してい
ないので、認証が出来ていないのではないかと推測しています。
ちなみに僕は、Basic認証はHttpURLConnectionでやっています。一部を抜き出
しておいておきますね。
https://gist.github.com/2005616
--
Keiji,
ml_an...@c-lis.co.jp
> 「WebViewClient」内の「onReceivedHttpAuthRequest」で
> 「getHttpAuthUsernamePassword」の返す配列にユーザー名とパスワードが
入ってこないのです。
> これがAndroid 2.3.*端末ではちゃんと入ってくるので、認証を通っています。
あれ、少し整理させてください。
・UsernamePasswordCredentialsやHttpResponseは、org.apache.httpライブラリ
の一部です。
・WebViewClientは、WebViewから取り扱います。
両者は別物なので、org.apache.httpライブラリから認証情報を設定したから
といって、自動的にWebView側に反映されるという事ではないという理解でいま
す(間違っていたら誰か突っ込みください)。
なので、最初ソースコードを拝見したときは、org.apache.httpで認証して、
レスポンスのHTMLをString型などで取得したものを、WebViewに流し込んで表示
しているものと想定していましたが、いかがでしょうか。
org.apache.httpで取得した場合、WebViewはHTMLを表示するだけなので認証は
発生せず、結果としてonReceivedHttpAuthRequestは呼ばれないし、当然
getHttpAuthUsernamePasswordも使う必要はないと思うのですが。。。
もしgetHttpAuthUsernamePasswordで認証情報を戻したいなら、事前に
setHttpAuthUsernamePasswordで値を設定する必要があるのではないでしょうか。
--
Keiji,
ml_an...@c-lis.co.jp