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 intento cargar una URL en el WebBView sólo muestra una pantalla en blanco. Si carga Google.com o yahoo.com está funcionando bien.
- Personalizar elementos de diálogo desplegables en WebView
- Agregar botón de actualización a la página de error - Webview
- Establecer cookies de forma programática en Crosswalk WebView en Android
- ¿Cómo descargar archivos de Android de vista web?
- Android WebView no está cargando el sitio web en caché si no hay conexión
- Uso de shadow-dom (Polymer) en Android 4.4 Webview
- Android PhoneGap con controles nativos
- Android reproducir video de youtube en la vista web
- Cómo obtener URL de enlace en Android WebView con HitTestResult para una imagen vinculada (y no la URL de imagen) con Longclick
- Hacer el epub libro en android?
- Phonegap uso de la aplicación android cpu en el fondo
- Android webview - solo línea javascript comentarios causando Uncaught SyntaxError errores?
- Abrir vínculos externos en el navegador con la vista web de Android
Por favor, visite este enlace:
Agregue este método de sobrescritura a su implementación de WebViewClient. Tendrá que compilarlo 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 funciona en esos dispositivos también (así que obviamente el comportamiento ha estado allí todo el tiempo).
@Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); // Ignore SSL certificate errors }
Esto te ayudara.
Por respuesta correcta por fargth, sigue una pequeña muestra de código que podría ayudar.
Primero, cree una clase que extienda WebViewClient y que esté configurada 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 } }
A continuación, con su objeto de vista web (iniciado en el método OnCreate ()), configure su cliente de vista web como una instancia de la clase override:
mWebView.setWebViewClient( new SSLTolerentWebViewClient() );
Para manejar correctamente la validación de certificados SSL y evitar el rechazo de aplicaciones de Google según la nueva Política de seguridad, cambie su código para invocar SslErrorHandler.proceed () siempre que el certificado presentado por el servidor cumpla con sus expectativas e invoque SslErrorHandler.cancel () de lo contrario.
Por ejemplo, agrego un cuadro de diálogo de alerta para que el usuario haya confirmado y parece que Google ya no muestra 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 que esto cambie no mostrará advertencia.
Quite el código abajo que funcionará
super.onReceivedSslError(view, handler, error);
He seguido las respuestas anteriores, pero aún así parece que no está funcionando para mí por debajo del código hizo un truco para mí al integrar gatways de pago que son generalmente las 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 protected]&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(); } } }
Por encima del código está haciendo una solicitud de publicación en webview y redirigir a la pasarela de pago.
Configuración de settings.setDomStorageEnabled(true);
Hizo un truco para mí Espero que esto ayude.
Para manejar urls 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 comprobar mi ejemplo completo aquí: https://github.com/Jorgesys/Android-WebView-Logging
- Fragmentos – El niño especificado ya tiene un padre. Debe llamar a removeView () en el padre del niño primero
- ¿Cómo listar archivos en un directorio de Android?