react-native-使用ProviderInstaller.installIfNeeded(context);

时间:2019-06-12 14:04:41

标签: android react-native

我正在使用React native在移动应用程序上执行一些请求。有一个小问题,除非我们手动启用TLS,否则Android 4.x无法发送请求。

我找到了一些有用的链接,并且能够使用

为Android 4.x启用TLS
ProviderInstaller.installIfNeeded(context);

enter image description here

从图片中我们可以看到,在installIfNeeded之前有SSLv3TLSv1

installIfNeeded之后,我们可以看到TLSv1TLSv1.1TLSv1.2

但是,我无法使用fetch发送请求。

以下是我启用TLS的代码:

public class TLSModule extends ReactContextBaseJavaModule {

    private static final String TAG = TLSModule.class.getName();

    public TLSModule(ReactApplicationContext reactContext) {
        super(reactContext);
    }

    @Override
    public String getName() {
        return "TLSModule";
    }

    @ReactMethod
    public void updateAndroidSecurityProvider(Callback callback) {

        /*
         * Support for TLS 1.1 and 1.2 on Android 4.x
         *
         * https://github.com/facebook/react-native/issues/7192
         * https://github.com/square/okhttp/issues/2372#issuecomment-331623598
         */

        CheckProtocols.checkEnabledProtocols();

        WritableMap map = new WritableNativeMap();

        try {

            ProviderInstaller.installIfNeeded(getReactApplicationContext());
            Log.d(TAG, "ProviderInstaller.installIfNeeded");

            map.putBoolean("status", true);
            map.putString("message", "Updated Android Security Provider");

        } catch (GooglePlayServicesRepairableException e) {

            e.printStackTrace();
            Log.d(TAG, "GooglePlayServicesRepairableException");

            map.putBoolean("status", false);
            map.putString("message", "Google Play Services is not installed,\nup-to-date, or enabled");

        } catch (GooglePlayServicesNotAvailableException e) {

            e.printStackTrace();
            Log.d(TAG, "GooglePlayServicesNotAvailableException");

            map.putBoolean("status", false);
            map.putString("message", "Google Play Services\nis not Available");
        }

        CheckProtocols.checkEnabledProtocols();

        callback.invoke(map);
    }
}

在React native中,我只是从应用程序的开头调用函数updateAndroidSecurityProvider。似乎已启用TLS,但fetch不起作用。

为了使其工作。我必须按两次R重新加载应用程序。但是,当我们发布应用程序时,用户无法按两次R或摇动手机来重新加载应用程序。

我也尝试:

ProviderInstaller.installIfNeededAsync(context, listener);

一切正常,但如果安装失败,则无法从Javascript端捕获错误。

请告诉我您对此有任何解决方案。预先谢谢你!

0 个答案:

没有答案