Sto cercando di trovare un modo corretto di gestire gli errori del certificato SSL nel Webview Android. Il mio obiettivo è quello di fornire un modo per caricare le pagine con gli errori del certificato SSL, ma lasciare che l'utente sceglie di caricare la pagina dopo di lui avvertimento circa la sicurezza ogni volta che tenta di caricare un URL con errori del certificato.Gestione degli errori del certificato di Android Webview e deselezionando le peferences certificato
Le soluzioni che ho trovato più vicini a discussioni suggeriscono ignorando l'WebViewClient come segue:
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(final WebView view, final SslErrorHandler handler, final SslError error) {
handler.proceed();
}
});
Tuttavia questo disabilita fondamentalmente SSL in WebView senza il consenso dell'utente.
Per riferimento qui sono i fili dove ho trovato questa soluzione:
Android WebView SSL 'Security Warning'
Does the Web View on Android support SSL?
Android WebView not loading an HTTPS URL
android webview with client certificate
Web view shows blank/white page after loading URL when using WIFI in Android
Unable to load a specific webpage on Android webview
WebView displays a blank view for certain links
Android WebView blocks redirect from https to http
Ignore ssl certificate requests in webview
sono andato avanti e implementato una versione leggermente diversa, che richiede all'utente:
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(final WebView view, final SslErrorHandler handler, final SslError error) {
//Showing a first confirmation dialog
AndroidUtils.showYesNoDialog(
//First confirmation message
"WARNING - THIS PAGE IS NOT SECURE! Are you sure you want to continue loading it?",
//First confirmation "YES" option runnable
new Runnable() {
@Override
public void run() {
//Showing a second confirmation dialog
AndroidUtils.showYesNoDialogWithResId(
//Second confirmation message
"You chose to load an unsecure page, are you sure you want to do that?",
//Second confirmation "YES" option runnable
new Runnable() {
@Override
public void run() {
//Disregard the error and proceed with the bad certificate anyways
handler.proceed();
}
},
//Second confirmation "NO" option runnable
new Runnable() {
@Override
public void run() {
//Cancel loading the page with that certificate error
handler.cancel();
}
}
);
}
},
//First confirmation "NO" option runnable
new Runnable() {
@Override
public void run() {
//Cancel loading the page with that certificate error
handler.cancel();
}
});
}
});
Questa implementazione richiede all'utente due volte se h e vuole caricare la pagina, se dice due volte sì, quindi l'errore viene ignorato e la pagina viene caricata, altrimenti il caricamento della pagina viene annullato.
La prima volta che un URL con carichi di errore del certificato, WebViewClient.onReceivedSslError
si chiama, se l'utente procede con l'errore di certificato e SslErrorHandler.proceed()
è chiamato, con i seguenti orari gli stessi carichi URL, WebViewClient.onReceivedSslError
non è mai chiamato di nuovo: solo uccidendo l'applicazione ripristina questo comportamento.
vorrei WebViewClient.onReceivedSslError
di essere chiamato sistematicamente quando un URL con carichi di errore certificato, non solo la prima volta. Ho provato a chiamare quei metodi senza successo:
/** JAVADOC QUOTE: Clears the SSL preferences table stored in response to proceeding with SSL certificate errors.*/
webView.clearSslPreferences();
//Those other methods I tried out of despair just in case
webView.clearFormData();
webView.clearCache(true);
webView.clearHistory();
webView.clearMatches();
Qualcuno sa come fare la chiamata WebView WebViewClient.onReceivedSslError
più di una volta per lo stesso URL, dopo SslErrorHandler.proceed()
è stato chiamato?
hai qualche soluzione?> –
No Non ho ancora trovato nessuna soluzione. – androidseb
@KingofMasses la notte impiega così tanto tempo nel tuo paese? sto scherzando, puoi pubblicare per favore? ho bisogno di questo ... – user2582318