Android WebView no carga una URL HTTPS

public void onCreate(Bundle savedInstance) { super.onCreate(savedInstance); setContentView(R.layout.show_voucher); webView=(WebView)findViewById(R.id.webview); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setBuiltInZoomControls(true); String url ="https://www.paymeon.com/Vouchers/?v=%C80%8D%B1x%D9%CFqh%FA%84%C35%0A%1F%CE&iv=%25%EE%BEi%F4%DAT%E1" //webView.loadUrl(url); // Not Working... Showing blank webView.loadUrl("http://www.yahoo.com"); // its working } 

Cuando bash cargar una URL en WebBView, solo muestra una pantalla en blanco. Si cargo Google.com o yahoo.com, funciona bien.

Por favor visite este enlace:

Agregue este método de anulación a su implementación de WebViewClient. Tendrá que comstackrlo con Android SDK 2.2 (API nivel 8) o posterior. El método aparece en el SDK público a partir de 2.2 (API nivel 8) pero lo hemos probado en dispositivos que ejecutan 2.1, 1.6 y 1.5 y también funciona en esos dispositivos (por lo que obviamente el comportamiento ha estado presente desde el principio).

  @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); // Ignore SSL certificate errors } 

Esto te ayudara.

Por respuesta correcta por fargth, a continuación se muestra una pequeña muestra del código que podría ayudar.

Primero, cree una clase que amplíe WebViewClient y que esté configurado para ignorar los errores de SSL:

 // SSL Error Tolerant Web View Client private class SSLTolerentWebViewClient extends WebViewClient { @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); // Ignore SSL certificate errors } } 

Luego, con su objeto de vista web (iniciado en el método OnCreate ()), configure su cliente de vista web para que sea una instancia de la clase de anulación:

  mWebView.setWebViewClient( new SSLTolerentWebViewClient() ); 

Para manejar adecuadamente la validación de certificados SSL y evitar el rechazo de aplicaciones de acuerdo con la nueva Política de seguridad, cambie su código para invocar a SslErrorHandler.proceed () siempre que el certificado presentado por el servidor cumpla con sus expectativas e invoque a SslErrorHandler.cancel () en caso contrario.

Por ejemplo, agregué un cuadro de diálogo de alerta para que el usuario haya confirmado y parece que Google ya no muestra ninguna advertencia.

  @Override public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) { final AlertDialog.Builder builder = new AlertDialog.Builder(this); 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?"; builder.setTitle("SSL Certificate Error"); builder.setMessage(message); 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(); } 

Después de esto cambia, no mostrará una advertencia.

Elimine el siguiente código, funcionará

  super.onReceivedSslError(view, handler, error); 

Para manejar las URL SSL, el método onReceivedSslError () de la clase WebViewClient, este es un ejemplo:

  webview.setWebViewClient(new WebViewClient() { ... ... ... @Override public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) { 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 += "\"SSL Certificate Error\" Do you want to continue anyway?.. YES"; handler.proceed(); } }); 

Puede consultar mi ejemplo completo aquí: https://github.com/Jorgesys/Android-WebView-Logging

enter image description here

Seguí las respuestas de arriba, pero aún así parece que no funciona para mí. El código de abajo me ayudó a la hora de integrar los paquetes de pago que generalmente son solicitudes https:

 public class MainActivity extends Activity { WebView webView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = (WebView) findViewById(R.id.webView1); WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); settings.setDomStorageEnabled(true); webView.setWebViewClient(new MyWebViewClient()); String postData = "amount=1000&firstname=mtetno&email=mttee@gmail.com&phone=2145635784&productinfo=android&surl=success.php" + "&furl=failure.php&lastname=qwerty&curl=dsdsd.com&address1=dsdsds&address2=dfdfd&city=dsdsds&state=dfdfdfd&" + "country=fdfdf&zipcode=123456&udf1=dsdsds&udf2=fsdfdsf&udf3=jhghjg&udf4=fdfd&udf5=fdfdf&pg=dfdf"; webView.postUrl( "http://host/payment.php", EncodingUtils.getBytes(postData, "BASE64")); } private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { webView.loadUrl(url); return true; } @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); } } } 

El código anterior está haciendo una solicitud posterior en la vista web y redirigiendo a la puerta de enlace de pago.

Configurando settings.setDomStorageEnabled(true); hizo un truco para mí Espero que esto ayude.

anular onReceivedSslError y eliminar

super.onReceivedSslError (vista, controlador, error)

Y para resolver la seguridad de Google:

setDomStorageEnabled (true);

El código completo es:

 webView.enableJavaScript(); webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); webView.setWebViewClient(new WebViewClient(){ @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { // DOT CALL SUPER METHOD super.onReceivedSslError(view, handler, error); } }); 

Para resolver la seguridad de Google, haz esto:

Líneas a la cima:

 import android.webkit.SslErrorHandler; import android.net.http.SslError; 

Código:

 class SSLTolerentWebViewClient extends WebViewClient { @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { if (error.toString() == "piglet") handler.cancel(); else handler.proceed(); // Ignore SSL certificate errors } }