3 回答

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊
它讀取 ,最初建議提高客戶端的連接超時(shí)值,正如本答案中所解釋的那樣 - 但是在查看當(dāng)前的源代碼時(shí)...這暗示了不兼容的協(xié)議。java.net.SocketTimeoutException
okhttp3.internal.platform.AndroidPlatform
服務(wù)器的SSL證書支持 ,因?yàn)檫@是安卓4.x所必需的(他們這邊沒有問題);問題在于,當(dāng)前版本的 不再支持,因此握手永遠(yuǎn)不會(huì)發(fā)生(這就是為什么它拋出這樣的誤導(dǎo)而不是)。TLS 1.0
OkHttp3
TLS 1.0
SocketTimeoutException
SSLHandshakeException
使用 ,仍應(yīng)支持默認(rèn)配置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();
還必須將其設(shè)置為以下客戶端:Retrofit
Retrofit retrofit = new Retrofit.Builder() .baseUrl(Api.BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .setClient(client) .build();
請(qǐng)參閱 TLS 配置歷史記錄,了解每個(gè)版本的可用協(xié)議支持??雌饋恚踔烈呀?jīng)支持 ,因?yàn)閷硇枰?Android 。它甚至可能不需要降級(jí),因?yàn)槿匀挥兄?,而在它已?jīng)被移入;仍然不確定。OkHttp3
3.12.x
TLS 1.3
Q
OkHttp3
MODERN_TLS
3.12.x
TLSv1
3.13.x
COMPATIBLE_TLS
3.14.x
即使使用 的當(dāng)前版本,仍然可以將所需的協(xié)議添加回去,因?yàn)檫@是一個(gè)帶有方法的方法 - 沒有任何保證,不會(huì)有進(jìn)一步的不兼容性; 可能仍然是支持Android 4.x版本的最佳選擇,甚至可能有新功能的后移植。OkHttp3
TLS 1.0
ConnectionSpec.COMPATIBLE_TLS
ArrayList
.add()
3.12.x

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊
21之前的安卓有一些缺少SSL和改造將不起作用。使用谷歌服務(wù),您可以在HTTP請(qǐng)求工作后更新設(shè)備協(xié)議
//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
}
});
添加回答
舉報(bào)