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
}
Lorsque j'essaie de charger une URL dans WebBView, seul un écran vide apparaît. Si je charge Google.com ou Yahoo.com, cela fonctionne bien.
S'il vous plaît visitez ce lien:
Ajoutez cette méthode de substitution à votre implémentation WebViewClient. Vous devrez le compiler avec Android SDK 2.2 (API niveau 8) ou une version ultérieure. La méthode apparaît dans le SDK public à partir de la version 2.2 (API de niveau 8), mais nous l’avons testée sur des périphériques exécutant les versions 2.1, 1.6 et 1.5, et elle fonctionne également sur ces périphériques (le comportement a donc toujours été présent).
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed(); // Ignore SSL certificate errors
}
cela vous aidera.
Par réponse correcte, voici un petit exemple de code qui pourrait aider.
Commencez par créer une classe qui étend WebViewClient et qui est configurée 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 certificate errors
}
}
Ensuite, avec votre objet d'affichage Web (initié dans la méthode OnCreate ()), définissez son client d'affichage Web comme une instance de la classe de substitution
mWebView.setWebViewClient(
new SSLTolerentWebViewClient()
);
Pour gérer correctement la validation des certificats 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 () lorsque le certificat présenté par le serveur répond à vos attentes et appelez SslErrorHandler.cancel () sinon.
Par exemple, j’ajoute une boîte de dialogue d’alerte pour que l’utilisateur soit confirmé et semble que Google n’affiche plus d’avertissement.
@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();
}
Après cela, aucun avertissement ne sera affiché.
Supprimez le code ci-dessous, cela fonctionnera
super.onReceivedSslError(view, handler, error);
Pour gérer les URL SSL, utilisez la méthode onReceivedSslError () à partir de la classe WebViewClient. Voici un exemple:
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();
}
});
Vous pouvez consulter mon exemple complet ici: https://github.com/Jorgesys/Android-WebView-Logging
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);
}
});
J'ai suivi les réponses ci-dessus, mais cela ne semble toujours pas fonctionner pour moi. Le code ci-dessous a été un piège pour moi lors de l'intégration de passerelles 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());
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();
}
}
}
Le code ci-dessus est en train de faire une demande de publication dans la visualisation Web et de le rediriger vers la passerelle de paiement.
Le réglage de settings.setDomStorageEnabled(true);
m'a permis de réussir un tour
Pour résoudre la sécurité 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.toString() == "piglet")
handler.cancel();
else
handler.proceed(); // Ignore SSL certificate errors
}
}
Copiez et collez votre code de ligne bro, cela fonctionnera, faites-moi confiance :) Je pense, vous obtenez une erreur ssl. Si vous utilisez la méthode onReceivedSslError avec override et supprimez la méthode super it super. Il suffit d'écrire handler.proceed (), l'erreur sera résolue.
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());