如何在React Native中启用Tls 1.1和1.2(Android)

时间:2019-01-09 13:11:24

标签: java android react-native fetch tls1.2

好吧,我正在为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商店中上传。

2 个答案:

答案 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);

//...
}