我有一个链接将在webview中打开.问题是它不能打开,直到我覆盖onReceivedSslError,如下所示:
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
Run Code Online (Sandbox Code Playgroud)
我从谷歌游戏获得安全警报说:
安全警报您的应用程序具有WebViewClient.onReceivedSslError处理程序的不安全实现.具体来说,该实现忽略了所有SSL证书验证错误,使您的应用程序容易受到中间人攻击.攻击者可以使用JavaScript更改受影响的WebView内容,读取传输的数据(例如登录凭据),以及在应用程序内部执行代码.
要正确处理SSL证书验证,只要服务器提供的证书符合您的期望,就更改代码以调用SslErrorHandler.proceed(),否则调用SslErrorHandler.cancel().包含受影响的应用和类别的电子邮件警报已发送到您的开发者帐户地址.
请尽快解决此漏洞并增加已升级APK的版本号.有关SSL错误处理程序的更多信息,请参阅开发人员帮助中心中的文档.对于其他技术问题,您可以发布到https://www.stackoverflow.com/questions并使用标签"android-security"和"SslErrorHandler."如果您使用的是负责此操作的第三方库,请通知第三方并与他们合作解决问题.
要确认您已正确升级,请将更新后的版本上传到开发者控制台,并在五小时后再回来查看.如果应用尚未正确升级,我们将显示警告.
请注意,虽然这些特定问题可能不会影响使用WebView SSL的每个应用程序,但最好保持所有安全补丁的最新状态.如果应用程序存在漏洞,使用户面临泄密风险,则可能会被视为违反内容政策和开发者分发协议第4.4节的危险产品.
请确保发布的所有应用均符合开发者分发协议和内容政策.如果您有任何疑问或疑虑,请通过Google Play开发者帮助中心与我们的支持小组联系.
如果我删除onReceivedSslError (handler.proceed()),则页面将无法打开.
无论如何我可以在webview中打开页面并避免安全警报.
android android-webview google-play android-security sslerrorhandler
我的应用程序中有一个webview,但有时由于连接,webview无法加载,我得到默认的网页不可用页面.如果webview无法加载,我想显示alertdialog.无论如何我可以检查(可能在shouldOverridePageLoad函数中)webview加载成功吗?再次感谢
我正在将谷歌文档中的文档加载到我的webview中.我看到的问题是,当用户启动应用程序但未连接到网络时,请看以下屏幕:

现在,如果他连接到网络,在没有重新启动应用程序的情况下,在webview中打开该链接的方法是什么.单击webview中的该链接是一个选项,但是如果发生这种情况,我是否可以提供一些更好的用户友好方式来重新加载webview中的页面?
在Android SDK中23 onReceivedError(WebView view, int errorCode, String description, String failingUrl)已被弃用并替换为onReceivedError(WebView view, WebResourceRequest request, WebResourceError error)。但是根据文档:
请注意,与弃用的回调版本不同,新版本将针对任何资源(iframe,图片等)调用,而不仅仅是主页
我们有一个应用程序,在不赞成使用的onReceivedError方法中,有一个代码可以显示本机视图,而不是让用户在WebView中看到错误。
我们想onReceivedError用新方法代替不推荐使用的方法。但是我们不想在本机视图中显示任何资源的错误,而只显示主页。
我们如何在新onReceivedError的页面中识别出错误不是来自主页?
PS 1:我们宁愿没有像解决这个存储主网址,并检查它,失败的URL。
PS 2:如果解决方案是仅使用不推荐使用的方法,那么对于新的Android版本仍可以保证调用该方法?
我正在研究一个正在加载网址的解决方案。我需要获取 Http 错误,以便我可以重新加载 url 来创建新会话。
@Override
public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
super.onReceivedHttpError(view, request, errorResponse);
Toast.makeText(getActivity(), "Unexpected error occurred.Reload page again.", Toast.LENGTH_SHORT).show();
if(errorResponse.getStatusCode() == 401){
customWebView.loadUrl(url);
}
}
Run Code Online (Sandbox Code Playgroud)
但上述代码的问题在于它是从 Marshmallow 运行的。任何人都可以建议我一种解决方案,让我在 Android 版本 < 23 以下时出现错误吗?