wake-up-neo.com

Android WebView lädt keine HTTPS-URL

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    
}

Wenn ich versuche, eine URL in das WebBView zu laden, wird nur ein leerer Bildschirm angezeigt. Wenn ich Google.com oder yahoo.com lade, funktioniert es einwandfrei.

67
sumit

Bitte besuchen Sie diesen Link:

Fügen Sie diese überschreibende Methode Ihrer WebViewClient-Implementierung hinzu. Sie müssen es mit Android SDK 2.2 (API Level 8) oder höher kompilieren. Die Methode erscheint im öffentlichen SDK ab 2.2 (API-Ebene 8), wir haben sie jedoch auf Geräten getestet, auf denen 2.1, 1.6 und 1.5 ausgeführt wird, und sie funktioniert auch auf diesen Geräten (das Verhalten war also offensichtlich schon immer vorhanden).

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

das wird dir helfen.

137
fargath

Je nach korrekter Antwort nach Weitem folgt ein kleines Codebeispiel, das helfen könnte.

Erstellen Sie zunächst eine Klasse, die WebViewClient erweitert und SSL-Fehler ignoriert:

// 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
            }

}

Legen Sie dann mit Ihrem Web-View-Objekt (in der OnCreate () - Methode initiiert) seinen Web-View-Client als Instanz der Überschreibungsklasse fest:

 mWebView.setWebViewClient(
                new SSLTolerentWebViewClient()
        );
42
robnick

Um die SSL-Zertifikatsüberprüfung ordnungsgemäß durchzuführen und zu verhindern, dass die Anwendung von Google gemäß den neuen Sicherheitsrichtlinien abgelehnt wird, ändern Sie den Code in SslErrorHandler.proceed (), wenn das vom Server präsentierte Zertifikat Ihre Erwartungen erfüllt, und rufen Sie andernfalls SslErrorHandler.cancel () auf.

Ich füge zum Beispiel einen Warnungsdialog hinzu, um die Bestätigung durch den Benutzer zu bestätigen, und es scheint, dass Google keine Warnung mehr anzeigt.

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

Nach diesen Änderungen wird keine Warnung angezeigt.

27
Anant Shah

Entfernen Sie den folgenden Code, damit es funktioniert 

 super.onReceivedSslError(view, handler, error);
7
King of Masses

So behandeln Sie SSL-URLs mit der Methode onReceivedSslError () der Klasse WebViewClient. Dies ist ein Beispiel:

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

        });

Sie können mein vollständiges Beispiel hier überprüfen: https://github.com/Jorgesys/Android-WebView-Logging

 enter image description here

5
Elenasys

onReceivedSslError überschreiben und entfernen 

super.onReceivedSslError (View, Handler, Fehler)

Und um die Google-Sicherheit zu lösen:

setDomStorageEnabled (true);

Vollständiger Code ist:

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

Ich folgte den obigen Antworten, aber es scheint mir nicht so zu funktionieren, dass Code unterhalb des Codes einen Trick bei der Integration von Payment-Gatways darstellt, die normalerweise https-Anfragen sind:

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

Der obige Code führt eine Post-Anfrage in Webview durch und leitet an das Zahlungs-Gateway weiter.

Die Einstellung von settings.setDomStorageEnabled(true); hat einen Trick für mich gemacht. Hoffe, das hilft.

4
KOTIOS

So lösen Sie die Google-Sicherheit:

Zeilen nach oben:

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.toString() == "piglet")
            handler.cancel();
        else
            handler.proceed(); // Ignore SSL certificate errors
    }
}
3
Ronen

Kopieren Sie Ihre Codezeile bro, es wird funktionieren, vertrauen Sie mir :) Ich denke, Sie erhalten einen SSL-Fehler. Wenn Sie die onReceivedSslError-Methode überschreiben und die Super-Methode super entfernen. Schreiben Sie einfach handler.proceed (), der Fehler wird behoben.

    webView.setWebChromeClient(new WebChromeClient() {
        public void onProgressChanged(WebView view, int progress) {

            activity.setTitle("Loading...");
            activity.setProgress(progress * 100);

            if (progress == 100)
                activity.setTitle(getResources().getString(R.string.app_name));
        }
    });

    webView.setWebViewClient(new WebViewClient() {
        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            Log.d("Failure Url :" , failingUrl);
        }

        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
            Log.d("Ssl Error:",handler.toString() + "error:" +  error);
            handler.proceed();
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    });
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setUseWideViewPort(true);
    webView.getSettings().setDomStorageEnabled(true);
    webView.loadUrl(Constant.VIRTUALPOS_URL + "token=" + Preference.getInstance(getContext()).getToken() + "&dealer=" + Preference.getInstance(getContext()).getDealerCode());
0
ozanurkan