読者です 読者をやめる 読者になる 読者になる

WebViewClient.onReceivedSslError

Android

onReceivedSslErrorは、SSLエラーが発生した時のハンドラ・・・。

WebViewClient | Android Developers

SSLエラーは普通のエラーと違って、こちらに来るらしい・・・。

CustomWebViewClient.javaで、

	// エラーが発生した時.
	@Override
	public void onReceivedError(WebView view, int errorCode, String description, String failingUrl){
		
		// エラーコードと説明の表示.
		Toast.makeText(context, Integer.toString(errorCode) + ":" + description, Toast.LENGTH_LONG).show();	// ToastでerrorCodeとdescriptionを表示.
		
	}

onReceivedErrorはToastだけにした・・・。
error.htmlもいらないので削除・・・。

で、

	// SSLエラーが発生した時.
	@Override
	public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){
		
		// SSLエラーのエラーメッセージを表示.
		Toast.makeText(context, "SSL Error!", Toast.LENGTH_LONG).show();	// Toastで"SSL Error!"を表示.
		
	}

onReceivedSslErrorに来たときは、トーストで"SSL Error!"と表示するようにした・・・。

で、これのテストのために、

オレオレ証明書をopensslで作る(詳細版) - ろば電子が詰まっている

ここを参考にSSLオレオレ証明書つくったり・・・。

f:id:BG1:20170302122012p:plain

まずは普通にアクセス・・・。

f:id:BG1:20170302122206p:plain

表示できる・・・。

f:id:BG1:20170302122253p:plain

0を消してロードしてみると、

f:id:BG1:20170302122407p:plain

前回の様にloadUrlしなければこうなる・・・。

f:id:BG1:20170302122447p:plain

0をつけて、httpsにしてロードすると、

f:id:BG1:20170302122538p:plain

"SSL Error!"が出るのはいいのだが、ロードが止まってしまって動かない・・・。(ように見えるのかもしれないけど・・・。)

なので、

親クラスに任せるようにすると、

f:id:BG1:20170302122954p:plain

ロードが完了する・・・。
で、結局エラーページが表示されているのだが、この辺は端末で違う・・・。(真っ白になる場合もある・・・。)

Sample/android/WebViewClient/onReceivedSslError/src/WebViewClient at master · bg1bgst333/Sample · GitHub