AndroidSDKバージョンによる通信エラー

950 views
Skip to first unread message

技術開発部 デジタル事業局

unread,
Mar 19, 2012, 8:08:51 AM3/19/12
to Android-SDK-Japan
お世話になっております。
竹村です。

Androidでの通信について御質問させて頂きます。

当方、Android SDK 2.1 ~ を対象にアプリケーションを開発しております。

概要はHTTPS通信を用いてサーバー上のオプションメニューの元が記述されたHTMLファイルを取得し、
そのHTMLファイルを展開、オプションメニューを作成。
そして、同じHTMLに記述されたURLをWebViewのloadURLメソッドを用いて表示させるというものです。

これらの流れはAndroid バージョン 2.3以降の端末では全て滞りなく完了できるのですが、
2.2の端末で同じアプリケーションを動作させようとした場合エラーが発生しました。

①HTTPS通信がエラー発生する。

HTTPS通信を用いてHTMLを取得しようとした場合、
2.2以前の端末でアクセスしようとすると
HttpClient.executeメソッドで例外が発生してしまいます。

以下にソースを提示します。

// 半角スペースがあればASCIIコードに置換しておく
url = url.replace(SPACE_CHARACTOR, SPACE_CODE);

// 通信パラメータ設定
HttpParams params = new BasicHttpParams();
// HTTP通信タイムアウト
final int httpTimeOut =
mContext.getResources().getInteger(R.integer.http_timeout);
HttpConnectionParams.setConnectionTimeout(params, httpTimeOut);
// ポスト送信用リクエスト作成
HttpClient httpClient = new DefaultHttpClient(params);
HttpPost httpPost = new HttpPost(url);
// リクエストURLにパラメータを付与
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
// 付与データ書き込み
try {
httpPost.setEntity(new UrlEncodedFormEntity(nvps));
// リクエスト送信、応答を受け取る
HttpResponse response = httpClient.execute(httpPost);
// 成否を受け取る
  final int responseStatus =
response.getStatusLine().getStatusCode();
// レスポンスコードが200で返っていれば受信成功
if (responseStatus == HttpStatus.SC_OK) {
// 応答パラメータ取得
HttpEntity httpEntity = response.getEntity();
// 応答パラメータをエンコード
final String responseHTML = EntityUtils.toString(httpEntity,
                               ConstsDefine.CHARACTOR_SET);
// コネクションクローズ
httpEntity.consumeContent();
// コネクション終了
httpClient.getConnectionManager().shutdown();

return responseHTML;
} else {
// コネクション終了
httpClient.getConnectionManager().shutdown();
return null;
}
} catch (UnsupportedEncodingException e) {
return null;
} catch (ParseException e) {
return null;
} catch (IOException e) {
return null;
}


②WebViewが真っ白に表示されてしまう

①のエラーを保留し、WebViewにダミーのURL(https)を入れてみました。
同じように2.3では正しく動作するのですが、
2.2以前の端末だと画面が真っ白になってしまいます。

http://www.glamenv-septzen.net/view/984

を参考に、WebViewにWebClientを定義し、onReceivedSslError()メソッドを実装したところ
2.2では表示するようになったのですが、2.1以前での回避方法が実装できませんでした。


上記、2点について解決方法を御存知の方がいらっしゃいましたら
御教授頂けると幸いです。

以上、何卒宜しく御願い致します。

egg

unread,
Mar 19, 2012, 8:56:01 AM3/19/12
to android-...@googlegroups.com
竹村さん

江川と申します。直接の回答ができるほど詳しくない、かつ、ご存知だろうなーと思うのですが、
一応書きます。

2.2にはSSLのアルゴリズム実装が無いようで、
SSLContext.getInstance("SSL");
などとすると、 java.security.NoSuchAlgorithmException が発生します。(TLSだといけますが。。)
2.3以降は大丈夫でした。本件に関係ありそうないくつか過去のIssueを示します。
http://code.google.com/p/android/issues/detail?id=10807
http://code.google.com/p/android/issues/detail?id=20635

WebViewにhttpsのURLを渡して表示する限りにおいては、2.1 - 4.0までで
実現できています。(自己証明書で試したことはありません。)

------------------------------------------
EGAWA Takashi

2012年3月19日21:08 技術開発部 デジタル事業局 <media.dev...@gmail.com>:

> --
> このメールは Google グループのグループ「Android-SDK-Japan」の登録者に送られています。
> このグループに投稿するには、android-...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-sdk-ja...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-sdk-japan?hl=ja からこのグループにアクセスしてください。
>

技術開発部 デジタル事業局

unread,
Mar 21, 2012, 4:27:56 AM3/21/12
to Android-SDK-Japan
江川様、回答ありがとうございます。

竹村です。
いつもお世話になっております。

> 2.2にはSSLのアルゴリズム実装が無いようで、
> SSLContext.getInstance("SSL");
> などとすると、 java.security.NoSuchAlgorithmException が発生します。(TLSだといけますが。。)
> 2.3以降は大丈夫でした。本件に関係ありそうないくつか過去のIssueを示します。
> http://code.google.com/p/android/issues/detail?id=10807
> http://code.google.com/p/android/issues/detail?id=20635

貴重な情報ありがとうございます。
参考させていただきます。


> WebViewにhttpsのURLを渡して表示する限りにおいては、2.1 - 4.0までで
> 実現できています。(自己証明書で試したことはありません。)

こちらは
WebView.loadURL("https://~");
のような記述で画面が表示されるという認識でよろしいでしょうか?

だとすると当方で何かコーディングミスをしてるのかもしれませんね
少し見直してみます。

重ねてありがとうございました。


On 3月19日, 午後9:56, egg <t.eg...@gmail.com> wrote:
> 竹村さん
>
> 江川と申します。直接の回答ができるほど詳しくない、かつ、ご存知だろうなーと思うのですが、
> 一応書きます。
>
> 2.2にはSSLのアルゴリズム実装が無いようで、
> SSLContext.getInstance("SSL");
> などとすると、 java.security.NoSuchAlgorithmException が発生します。(TLSだといけますが。。)
> 2.3以降は大丈夫でした。本件に関係ありそうないくつか過去のIssueを示します。http://code.google.com/p/android/issues/detail?id=10807http://code.google.com/p/android/issues/detail?id=20635
>
> WebViewにhttpsのURLを渡して表示する限りにおいては、2.1 - 4.0までで
> 実現できています。(自己証明書で試したことはありません。)
>
> ------------------------------------------
> EGAWA Takashi
>
> 2012年3月19日21:08 技術開発部 デジタル事業局 <media.developer....@gmail.com>:

kacodama

unread,
Mar 21, 2012, 5:30:48 AM3/21/12
to android-...@googlegroups.com
2.2以降のソースコードを落としてきて、

WebViewClient.java

を自分のプロジェクトにそのまま組み込で利用すると、2.1以下でも対応できてたような気がします。
テストしたのが1年くらい前なのでちょっとあやふやですが・・・

以上ご参考になれば幸いです。



2012年3月21日水曜日17時27分56秒 UTC+9 技術開発部 デジタル事業局:
> > このグループに投稿するには、android-sdk-ja...@googlegroups.com にメールを送信してください。
> > このグループから退会するには、android-sdk-japan+unsubscribe@googlegroups.com にメールを送信してください。
> > 詳細については、http://groups.google.com/group/android-sdk-japan?hl=jaからこのグループにアクセスしてください。

2012年3月21日水曜日17時27分56秒 UTC+9 技術開発部 デジタル事業局:
> > このグループに投稿するには、android-sdk-ja...@googlegroups.com にメールを送信してください。
> > このグループから退会するには、android-sdk-japan+unsubscribe@googlegroups.com にメールを送信してください。
> > 詳細については、http://groups.google.com/group/android-sdk-japan?hl=jaからこのグループにアクセスしてください。
Reply all
Reply to author
Forward
0 new messages