Android WebView ne charge pas une 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); Ssortingng 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 } 

Lorsque j’essaie de charger une URL dans WebBView, elle affiche uniquement un écran vide. Si je charge Google.com ou yahoo.com, cela fonctionne bien.

S’il vous plaît visitez ce lien:

Ajoutez cette méthode de remplacement à votre implémentation WebViewClient. Vous devrez le comstackr avec Android SDK 2.2 (API niveau 8) ou ultérieur. La méthode apparaît dans le SDK public à partir de la version 2.2 (API niveau 8), mais nous l’avons testée sur des périphériques fonctionnant sous 2.1, 1.6 et 1.5 et elle fonctionne également sur ces périphériques (le comportement a donc toujours existé).

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

cela vous aidera.

Par réponse correcte par fargth, voici un petit exemple de code qui pourrait vous aider.

Tout d’abord, créez une classe qui étend WebViewClient et qui est définie pour ignorer les erreurs 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 certificatee errors } } 

Ensuite, avec votre object d’affichage Web (lancé dans la méthode OnCreate ()), définissez son client d’affichage Web comme instance de la classe de substitution:

  mWebView.setWebViewClient( new SSLTolerentWebViewClient() ); 

Pour gérer correctement la validation des certificates SSL et éviter le rejet des applications par Google conformément à la nouvelle stratégie de sécurité, modifiez votre code pour appeler SslErrorHandler.proceed () chaque fois que le certificate présenté par le serveur répond à vos attentes et appelez SslErrorHandler.cancel ().

Par exemple, j’ajoute une boîte de dialog d’alerte pour que l’utilisateur ait confirmé et que Google ne montre plus d’avertissement.

  @Override public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) { final AlertDialog.Builder builder = new AlertDialog.Builder(this); Ssortingng message = "SSL Certificate error."; switch (error.getPrimaryError()) { case SslError.SSL_UNTRUSTED: message = "The certificatee authority is not trusted."; break; case SslError.SSL_EXPIRED: message = "The certificatee has expired."; break; case SslError.SSL_IDMISMATCH: message = "The certificatee Hostname mismatch."; break; case SslError.SSL_NOTYETVALID: message = "The certificatee 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(); } 

Après cela change il ne montrera plus d’avertissement.

Supprimer le code ci-dessous, il fonctionnera

  super.onReceivedSslError(view, handler, error); 

Pour gérer les URL SSL, la méthode onReceivedSslError () de la classe WebViewClient, ceci est un exemple:

  webview.setWebViewClient(new WebViewClient() { ... ... ... @Override public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) { Ssortingng message = "SSL Certificate error."; switch (error.getPrimaryError()) { case SslError.SSL_UNTRUSTED: message = "The certificatee authority is not trusted."; break; case SslError.SSL_EXPIRED: message = "The certificatee has expired."; break; case SslError.SSL_IDMISMATCH: message = "The certificatee Hostname mismatch."; break; case SslError.SSL_NOTYETVALID: message = "The certificatee is not yet valid."; break; } message += "\"SSL Certificate Error\" Do you want to continue anyway?.. YES"; handler.proceed(); } }); 

Vous pouvez vérifier mon exemple complet ici: https://github.com/Jorgesys/Android-WebView-Logging

entrer la description de l'image ici

J’ai suivi les réponses ci-dessus mais il ne semble toujours pas fonctionner pour moi, car le code a fait un tour pour moi lors de l’intégration des canaux de paiement qui sont généralement des requêtes 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()); Ssortingng 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, Ssortingng url) { webView.loadUrl(url); return true; } @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); } } } 

Le code ci-dessus effectue une demande de publication dans WebView et redirige vers la passerelle de paiement.

Configuration de settings.setDomStorageEnabled(true); a fait un tour pour moi J’espère que ça aide.

remplacer onReceivedSslError et supprimer

super.onReceivedSslError (vue, gestionnaire, erreur)

Et pour résoudre la sécurité de Google:

setDomStorageEnabled (true);

Le code complet est:

 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); } }); 

Pour résoudre la sécurité de Google, procédez comme suit:

Lignes vers le haut:

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

Code:

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