我在Playstore上标记了一个问题,谷歌发送邮件我的应用程序因为使用SSL而不安全。
目前在我的应用程序中,我有一个webview
,它是加载链接,它包含https网址。
在网页设置上我这样做:
web.setWebViewClient(new SSLTolerentWebViewClient());
忽略ssl证书我使用下面的代码但是由于忽略证书playstore显示我的应用程序不安全
private class SSLTolerentWebViewClient extends WebViewClient {
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed(); // Ignore SSL certificate errors
}
}
任何人都可以建议我如何执行此操作,以便我的WebView
可以处理https网址并且Playstore不会将我的应用标记为不安全?
答案 0 :(得分:29)
解决Google Play警告:WebViewClient.onReceivedSslError处理程序
并非始终强制执行handler.proceed();但你还必须包括handler.cancel();因此用户可以避免加载未说明的内容。
处理WebViewClient.onReceivedSslError处理程序的不安全实现
使用以下代码
webView.setWebViewClient(new SSLTolerentWebViewClient());
webView.loadUrl(myhttps url);
和
private class SSLTolerentWebViewClient extends WebViewClient {
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
AlertDialog.Builder builder = new AlertDialog.Builder(Tab1Activity.this);
AlertDialog alertDialog = builder.create();
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?";
alertDialog.setTitle("SSL Certificate Error");
alertDialog.setMessage(message);
alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Ignore SSL certificate errors
handler.proceed();
}
});
alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.cancel();
}
});
alertDialog.show();
}
}
答案 1 :(得分:0)
仅供以后参考或其他面临相同问题的人!使用Xamarin表单。
它有效,这是我使用的完整代码。它还修复了另一个错误,该错误使用Xamarin Shell时WebView的Scroll不再起作用。
using System;
using Android.Content;
using Android.Views;
using Mobile.Droid.Render;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly: ExportRenderer(typeof(WebView), typeof(MyWebViewRenderer))]
namespace Mobile.Droid.Render
{
public class MyWebViewRenderer : WebViewRenderer
{
public MyWebViewRenderer(Context context) : base(context)
{
}
public override bool DispatchTouchEvent(MotionEvent e)
{
Parent.RequestDisallowInterceptTouchEvent(true);
return base.DispatchTouchEvent(e);
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
{
base.OnElementChanged(e);
// Setting the background as transparent
this.Control.SetBackgroundColor(Android.Graphics.Color.Transparent);
if (e.OldElement == null)
{
Control.SetWebViewClient(new MyFormsWebViewClient(this));
}
}
internal class MyFormsWebViewClient : FormsWebViewClient
{
MyWebViewRenderer _renderer;
public MyFormsWebViewClient(MyWebViewRenderer renderer) : base(renderer)
{
_renderer = renderer;
}
public override void OnReceivedSslError(Android.Webkit.WebView view, Android.Webkit.SslErrorHandler handler, Android.Net.Http.SslError error)
{
handler.Proceed();
}
public override void OnPageFinished(Android.Webkit.WebView view, string url)
{
base.OnPageFinished(view, url);
}
public override void OnLoadResource(Android.Webkit.WebView view, string url)
{
base.OnLoadResource(view, url);
}
}
}
}
答案 2 :(得分:-3)
尝试使用http而不是https链接到网页。这可能会重定向到https站点。您无需编码即可忽略安全证书。