Java 如何在react native(android)中启用Tls 1.1和1.2

Java 如何在react native(android)中启用Tls 1.1和1.2,java,android,react-native,fetch,tls1.2,Java,Android,React Native,Fetch,Tls1.2,嗯,我正在为android和IOS平台开发一个应用程序,在我的应用程序中,我从API中复制数据。我意识到我的应用程序在某些android版本中无法获取数据。我在4.1、4.4和5.1中进行了测试。这些版本不提供数据。但是Android 7、fetch和我没有问题 我在寻找解决方案,我发现androids版本使用MinsdkVersion16,默认情况下没有启用TLS1.1和1.2。(这是从20个sdkVersion实现的)要启用它们,我必须使用Java。我3个月前才开始使用react nativ

嗯,我正在为android和IOS平台开发一个应用程序,在我的应用程序中,我从API中复制数据。我意识到我的应用程序在某些android版本中无法获取数据。我在4.1、4.4和5.1中进行了测试。这些版本不提供数据。但是Android 7、fetch和我没有问题


我在寻找解决方案,我发现androids版本使用MinsdkVersion16,默认情况下没有启用TLS1.1和1.2。(这是从20个sdkVersion实现的)要启用它们,我必须使用Java。我3个月前才开始使用react native,我不是java程序员。所以我在周围看到的东西,不要确切地告诉我我要做什么。有谁能告诉我在react原生android应用程序中启用TLS 1.1和TLS 2.2的步骤吗。我只看到一些示例,它们给出了要添加的代码,但没有解释或说明步骤。我还看到一条评论说,通过启用TLS1.1和1.2,应用程序无法在play store中上载。

在android
build.gradle中添加此库。

implementation 'com.google.android.gms:play-services-safetynet:+'
并将此代码添加到您的
main应用程序.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'
更新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);

//...
} 

React native允许您编写本机组件。只需获取一些与TLS1.2一起工作的java代码,并用它创建RN组件。可以显示任何示例吗?请发布您的导入。谢谢!我已经添加了导入,欢迎@菲利普·布兰登·霍尔姆斯出色!非常感谢。非常好。我想指出一个重要的细节:设备(或模拟器)必须安装google play store,以便SSL层正确安装。如果它是一个模拟器,我建议您使用。