3 回答
TA贡献1934条经验 获得超2个赞
它读取 ,最初建议提高客户端的连接超时值,正如本答案中所解释的那样 - 但是在查看当前的源代码时...这暗示了不兼容的协议。java.net.SocketTimeoutException
okhttp3.internal.platform.AndroidPlatform
服务器的SSL证书支持 ,因为这是安卓4.x所必需的(他们这边没有问题);问题在于,当前版本的 不再支持,因此握手永远不会发生(这就是为什么它抛出这样的误导而不是)。TLS 1.0
OkHttp3
TLS 1.0
SocketTimeoutException
SSLHandshakeException
使用 ,仍应支持默认配置OkHttp3
3.12.x
MODERN_TLS
-
但是可以指示使用配置来代替:OkHttp3
3.13.x
COMPATIBLE_TLS
/* ConnectionSpec.MODERN_TLS is the default value */
List tlsSpecs = Arrays.asList(ConnectionSpec.MODERN_TLS);
/* providing backwards-compatibility for API lower than Lollipop: */
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
tlsSpecs = Arrays.asList(ConnectionSpec.COMPATIBLE_TLS);
}
OkHttpClient client = new OkHttpClient.Builder()
.connectionSpecs(tlsSpecs)
.build();
还必须将其设置为以下客户端:Retrofit
Retrofit retrofit = new Retrofit.Builder() .baseUrl(Api.BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .setClient(client) .build();
请参阅 TLS 配置历史记录,了解每个版本的可用协议支持。看起来,甚至已经支持 ,因为将来需要 Android 。它甚至可能不需要降级,因为仍然有支撑,而在它已经被移入;仍然不确定。OkHttp3
3.12.x
TLS 1.3
Q
OkHttp3
MODERN_TLS
3.12.x
TLSv1
3.13.x
COMPATIBLE_TLS
3.14.x
即使使用 的当前版本,仍然可以将所需的协议添加回去,因为这是一个带有方法的方法 - 没有任何保证,不会有进一步的不兼容性; 可能仍然是支持Android 4.x版本的最佳选择,甚至可能有新功能的后移植。OkHttp3
TLS 1.0
ConnectionSpec.COMPATIBLE_TLS
ArrayList
.add()
3.12.x
TA贡献1878条经验 获得超4个赞
21之前的安卓有一些缺少SSL和改造将不起作用。使用谷歌服务,您可以在HTTP请求工作后更新设备协议
//compile 'com.google.android.gms:play-services-base:11.0.0'
//remember to add the library in your dependencies
//compile 'com.google.android.gms:play-services-base:$currentVersion'
ProviderInstaller.installIfNeededAsync(this, new ProviderInstallListener() {
@Override
public void onProviderInstalled() {
//Do your http request here
}
@Override
public void onProviderInstallFailed(int errorCode, Intent recoveryIntent) {
//sad face :C is sad
}
});
添加回答
举报