我正在使用React native在移动应用程序上执行一些请求。有一个小问题,除非我们手动启用TLS,否则Android 4.x无法发送请求。
我找到了一些有用的链接,并且能够使用
为Android 4.x启用TLSProviderInstaller.installIfNeeded(context);
从图片中我们可以看到,在installIfNeeded
之前有SSLv3
和TLSv1
在installIfNeeded
之后,我们可以看到TLSv1
,TLSv1.1
和TLSv1.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端捕获错误。
请告诉我您对此有任何解决方案。预先谢谢你!