2017-05-04 16 views
1

私はAndroid App内にWebビューを実装しています。それは完全にアンドロイドのマシュマロでWebページを表示していますが、アンドロイド4.1.1の1つのデバイスはページを表示していません。このコードを追加しましたWebviewで安全でないコンテンツが表示されています

public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { 
      handler.proceed(); 
     } 

SSLエラーです。

しかし、また、変更ページで

はsomething.comでページが

任意のヘルプから安全でないコンテンツを表示

4.1.1デバイスに表示されていませんか?

+0

、とあなたのためにその作業をするクラスを作成しますか? –

+0

これ以外のヘルプが必要ですか? –

+0

これは単なる公開サイトであり、クロムやクロムのカスタムタブで開いたときに完全に開きますが、ウェブビューでエラーが発生します –

答えて

1

SSL証明書の検証を正しく処理するには、サーバーによって提示された証明書が期待通りになるたびにSslErrorHandler.proceed()を呼び出すようにコードを変更し、それ以外の場合はSslErrorHandler.cancel()を呼び出します。 Googleが警告を再生する解決するために

@Override 
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) { 
    final AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage(R.string.notification_error_ssl_cert_invalid); 
    builder.setPositiveButton("continue", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      handler.proceed(); 
     } 
    }); 
    builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      handler.cancel(); 
     } 
    }); 
    final AlertDialog dialog = builder.create(); 
    dialog.show(); 
} 
+0

これは単なる公開サイトであり、クロムまたはクロムのカスタムタブで開くと完全に開きますが、webviewでエラーが発生します –

1

:WebViewClient.onReceivedSslErrorハンドラ

常にhandler.proceed();に強制するものではありませが、あなたはまた、(handler.cancelを含める必要が)。ユーザーは危険なコンテンツの読み込みを避けることができます。 WebViewClient.onReceivedSslErrorハンドラの危険な実装を処理するために

webView.setWebViewClient(new SSLTolerentWebViewClient()); 
webView.loadUrl(myhttps url); 

次のコードを使用し

private class SSLTolerentWebViewClient extends WebViewClient { 
    public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) { 

     AlertDialog.Builder builder = new AlertDialog.Builder(Tab1Activity.this); 
     AlertDialog alertDialog = builder.create(); 
     String message = "SSL Certificate error."; 
     switch (error.getPrimaryError()) { 
      case SslError.SSL_UNTRUSTED: 
       message = "The certificate authority is not trusted."; 
       break; 
      case SslError.SSL_EXPIRED: 
       message = "The certificate has expired."; 
       break; 
      case SslError.SSL_IDMISMATCH: 
       message = "The certificate Hostname mismatch."; 
       break; 
      case SslError.SSL_NOTYETVALID: 
       message = "The certificate is not yet valid."; 
       break; 
     } 

     message += " Do you want to continue anyway?"; 
     alertDialog.setTitle("SSL Certificate Error"); 
     alertDialog.setMessage(message); 
     alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       // Ignore SSL certificate errors 
       handler.proceed(); 
      } 
     }); 

     alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 

       handler.cancel(); 
      } 
     }); 
     alertDialog.show(); 
    } 
}