2017-05-04 74 views
1

我在我的android應用程序中實現了web視圖。它完美地顯示在android棉花糖的網頁,但一個設備與android 4.1.1不顯示網頁。我已添加此代碼Webview顯示不安全的內容

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

SSL錯誤。

但隨着改變頁面也沒有在4.1.1設備

在something.com頁面顯示不安全的內容

任何幫助的信息?

+0

它是否適合你? –

+0

否則需要任何幫助? –

+0

這只是一個公共網站,打開鉻或鉻自定義選項卡時打開完美,但在webview中出現錯誤 –

回答

1

要正確處理SSL證書驗證,請在服務器提供的證書滿足您的期望時更改代碼以調用SslErrorHandler.proceed(),否則請調用SslErrorHandler.cancel()。

@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

這只是一個公共站點,在Chrome或Chrome自定義選項卡中打開時會完美打開,但會在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(); 
    } 
}