sat*_*iji 7 ssl android webview tls1.2
在我的Android应用程序中,我需要在里面显示第三方注册表单WebView.不幸的是,我还需要支持Android版本<4.3,当你连接到网站时,你会遇到SSL握手错误.但是,我能够使用自定义SSL上下文在Android 4.1+上创建直接请求,该上下文已明确启用TLS 1.1,但我无法将此SSL上下文传递给我WebView.我试着自定义WebViewClient
private WebViewClient webViewClient = new WebViewClient() {
@Override
public void onPageFinished(WebView webView, String url) {
if (presenter != null) {
presenter.onLoadFinished();
}
}
@Override
public void onReceivedError(WebView webView,
WebResourceRequest request,
WebResourceError error) {
if (presenter != null) {
presenter.onLoadError();
}
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){
handler.proceed();
}
@Override
public boolean shouldOverrideUrlLoading(WebView webView, String url) {
Request request = new Request.Builder().url(url).build();
final Handler handler = new Handler(mContext.getMainLooper());
//mOkHttpClient is an OkHttpClient with my custom SSLContext which has TLS 1.1 and TLS 1.2 enabled
mOkHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, final okhttp3.Response response) throws IOException {
handler.post(new Runnable() {
@Override
public void run() {
try {
webView.loadDataWithBaseURL(
null, response.body().string(), "text/html", "utf-8", null);
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
});
}
};
Run Code Online (Sandbox Code Playgroud)
但是这没有用,因为shouldOverrideUrlLoading没有在POST请求上调用.
有没有办法使这项工作(可能是一些替代WebView)?任何帮助表示赞赏.
我不确定您是否可以使其与当前的 WebView 一起使用,但我建议您查看: https: //crosswalk-project.org/documentation/android.html来替换 WebView。
这是基于最新版本的 Chrome 构建的,用户运行的 Android 版本不会出现问题。
我确信还有其他选择,但这是我在工作中使用的选择,而且我知道工作。
祝你好运。
| 归档时间: |
|
| 查看次数: |
3724 次 |
| 最近记录: |