如何在react-native(0.54 +)中使用我自己的OkHttp客户端

V P*_*V P 4 okhttp react-native

我的图像和许多其他功能都位于我的后端API(使用Java Spark框架编写)的背后。这些服务仅是https,并且API通常会执行其他功能(例如,它们不仅提供静态图像)。

在React本机javascript形式中,

const imageTest='https://10.0.1.10:4567/api/v1/get-image-simple/full-size/myImage.jpg/'


            <Image source={{uri : imageTest}} 
                   style={theme.cardImageStyle}
            />
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为我的服务器使用自签名证书(并且还需要一些显式头)。

相同类型的图片url链接在我的android主机中也可以正常工作(我的应用是混合动力,有些活动仅是android,有些则是带有react native)。我的android应用具有自定义的okhttp客户端以及所有必需的设置,可通过HTTP与我的api通信。

我找不到如何将OkHTTP客户端连接到本机响应的示例/参考,以便所有内容都通过该响应。我曾见过的各种bug报告这个,但似乎无法找到什么样的反应,原生版本实际上是任何文件。

我试着盲目地做

com.facebook.react.modules.network.OkHttpClientProvider.replaceOkHttpClient(
                    MyPersonalAppInstance.getApplicationComponent().okHttpClient());
Run Code Online (Sandbox Code Playgroud)

但它似乎无能为力;

iag*_*een 6

我还没有机会对此进行测试,但是根据的讨论[this issue][1],以下内容应能在0.54+版本中工作以设置自定义OkHttp客户端。

创建React Native应用程序并在构造函数中设置一个自定义工厂,例如 OkHttpClientProvider.setOkHttpClientFactory(new CustomNetworkModule());

定制工厂的外观如下:

class CustomNetworkModule implements OkHttpClientFactory {
    public OkHttpClient createNewNetworkModuleClient() {
        return new OkHttpClient.Builder()
                        .cookieJar(new ReactCookieJarContainer())
                        .build();
    }
}
Run Code Online (Sandbox Code Playgroud)

以上是基于此commit的信息。

  • 要获取 react-native 使用的所有默认配置并在此基础上进行构建,请使用 `OkHttpClientProvider.createClientBuilder()` 而不是 `new OkHttpClient.Builder()`。 (3认同)
  • 对于像我这样的人,您的主机android应用中已经有一个okhttp客户端。只需添加okHttpBuilder.cookieJar(new com.facebook.react.modules.network.ReactCookieJarContainer()); 到您现有的okhttp构建器-可以运行 然后,我只是简单地访问了okhttp客户端全局实例,并从iagreen的createNewNetworkModule方法中返回了它。 (2认同)