嗯,我正在为安卓和IOS平台开发一个应用程序,在我的应用程序中,我正在从API中获取数据。我意识到我的应用程序无法在某些安卓版本中获取数据。我在 andoroid 4.1、4.4 和 5.1 中进行了测试。这些版本不会收集数据。但是Android 7,fetch和我没有问题。
我正在寻找解决方案,我发现使用 minSdkVersion 16 的 androids 版本,默认情况下它们没有启用 TLS 1.1 和 1.2。(这是从 20 个 sdkVersion 实现的)为了启用它们,我将不得不与Java有关。3个月前,我只是在与react-native一起工作,我不是Java程序员。所以我在周围看到的东西,并没有告诉我我必须做什么。任何人都可以告诉我在反应原生安卓应用程序中启用TLS 1.1和TLS 2.2的步骤。我只看到提供要添加的代码的示例,它们没有解释或告诉步骤。我还阅读了一条评论,该评论说,通过启用TLS 1.1和1.2,该应用程序无法在Play商店中上传。
android 中添加此库build.gradle
implementation 'com.google.android.gms:play-services-safetynet:+'
并将此代码添加到您的MainApplication.java
import android.content.Intent;
import com.google.android.gms.common.GoogleApiAvailability;
import com.google.android.gms.security.ProviderInstaller;
import com.google.android.gms.security.ProviderInstaller.ProviderInstallListener;
@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);
}
});
}
经过多次尝试解决它,只有一种方法对我有用。本质上,您需要从Google添加Java安全包,以便在旧的Android版本(<5.0)上启用TLSv1/TLSv1.1/TLSv1.2。这也将增加对 TLSv1.3 的支持以及增加 apk 大小,但我想我们将不得不忍受它。
在 app/build.gradle 中添加包:
implementation 'org.conscrypt:conscrypt-android:2.1.0'
更新主应用程序.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);
//...
}