好吧,我正在为Android和IOS平台开发一个应用程序,我正在从API中获取数据。我意识到我的应用无法在某些Android版本中获取数据。我在ororoid 4.1、4.4和5.1中进行了测试。这些版本不影响数据。但是Android 7,fetch和我都没有问题。
我在寻找解决方案,我发现使用minSdkVersion 16的android版本默认不启用TLS 1.1和1.2。 (这是从20 sdkVersion实现的)并且要启用它们,我将与Java有关。我只是在3个月前与react-native一起工作,而且我不是Java程序员。因此,我所看到的东西,不要完全告诉我我要做的事情。谁能告诉我在React Native的Android应用中启用TLS 1.1和TLS 2.2的步骤。我只是看到提供代码的示例,它们没有解释或告诉步骤。而且我还读到一条评论,说通过启用TLS 1.1和1.2,该应用无法在Play商店中上传。
答案 0 :(得分:0)
将此库添加到Android build.gradle
implementation 'com.google.android.gms:play-services-safetynet:+'
并将此代码添加到您的MainApplication.java
@Override
public void onCreate() {
super.onCreate();
upgradeSecurityProvider();
SoLoader.init(this, /* native exopackage */ false);
}
private void upgradeSecurityProvider() {
ProviderInstaller.installIfNeededAsync(this, new ProviderInstallListener() {
@Override
public void onProviderInstalled() {
}
@Override
public void onProviderInstallFailed(int errorCode, Intent recoveryIntent) {
// GooglePlayServicesUtil.showErrorNotification(errorCode, MainApplication.this);
GoogleApiAvailability.getInstance().showErrorNotification(MainApplication.this, errorCode);
}
});
}
答案 1 :(得分:0)
在尝试解决许多问题之后,只有一种方法对我有效。本质上,您需要从Google添加Java安全软件包,以在旧Android版本(<5.0)上启用TLSv1 / TLSv1.1 / TLSv1.2。这还将增加对TLSv1.3的支持并增加apk大小,但我想我们必须忍受它。
在 app / build.gradle 中添加软件包:
implementation 'org.conscrypt:conscrypt-android:2.1.0'
更新 MainApplication.java 以使用新的安全提供程序:
import java.security.Security;
import javax.net.ssl.SSLContext;
import org.conscrypt.OpenSSLProvider;
...
@Override
public void onCreate() {
super.onCreate();
Security.insertProviderAt(new org.conscrypt.OpenSSLProvider(), 1);
//...
}