【问题标题】:how to use my own OkHttp client in react-native (0.54 + )如何在 react-native (0.54 + ) 中使用我自己的 OkHttp 客户端
【发布时间】:2018-04-09 13:21:12
【问题描述】:

我的图像和许多其他功能位于我的后端 API(使用 java spark 框架编写)后面。这些服务仅支持 https,并且 API 通常执行附加功能(例如,它们不只是提供静态图像)。

在 React-native 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}
            />

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

相同类型的图像 url 链接,在我的 android 主机中工作正常(我的应用程序是混合的,有些活动仅适用于 android,有些是 react native)。 我的 android 应用程序具有自定义 okhttp 客户端,具有所有必要的设置,可以通过 HTTPs 与我的 api 通信。

我找不到如何将我的 OkHTTP 客户端挂接到本机反应的示例/参考,以便一切都通过那里。 我看过各种错误报告,例如 this,但似乎找不到任何关于 react-native 版本中实际内容的文档。

我试过了,盲目地做

com.facebook.react.modules.network.OkHttpClientProvider.replaceOkHttpClient(
                    MyPersonalAppInstance.getApplicationComponent().okHttpClient());

但它似乎没有做任何事情;

【问题讨论】:

  • 能否麻烦您提供一个自定义 Okhttp 客户端的完整示例?或者更好的工作回购?我正在尝试增加每个主机允许的最大请求数,但到目前为止没有取得多大成功,而您的问题是我迄今为止最接近解决方案的问题。
  • @Unforgiven 为我创建完整的示例非常耗时。但是,请搜索“react-native cert pinning”示例。好像有很多人在做。还要检查medium.com/@jaedmuva/…medium.com/applike/…github.com/approov/react-native-cert-pinner/blob/master/android/…
  • 实际上,最终我必须从源代码构建自己的 RN 分支来添加此修复程序。
  • @Unforgiven RN 团队在 0.61 中引入了一个错误,他们显然禁用了覆盖的能力,但在 0.61.5 中已修复。我使用 0.60 和压倒一切的作品。

标签: react-native okhttp


【解决方案1】:

我还没有机会对此进行测试,但根据[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();
    }
}

以上内容基于来自this commit的信息。

【讨论】:

  • 谢谢 iagreen。我现在收到一个错误(红屏):okhttp3.CookieJar$1 无法转换为networkingModule.java:141 中的com.facebook.react.modules.network.CookieJarContainer。它至少告诉我我的更改正在影响某些东西。但是有没有我应该导入的 react-native okhttp 库而不是 import okhttp3.OkHttpClient ?
  • @VP 看起来您需要在自定义 okhttp 客户端中使用 react cookie jar。尝试将 .cookieJar(new ReactCookieJarContainer()) 添加到您的 okhttpclient 构建器。
  • 对于像我这样的人,在您的主机 Android 应用程序中已经有一个现有的 okhttp 客户端。只需添加 okHttpBuilder.cookieJar(new com.facebook.react.modules.network.ReactCookieJarContainer());到您现有的 okhttp 构建器 - 有效。然后我只是简单地访问了 okhttp 客户端全局实例并从 iagreen 的 createNewNetworkModule 方法中返回它。
  • 不客气。 OkHttpClient 的newBuilder 可能很有用——reactClient = androidClient.newBuilder().setCookieJar(yourCookieJar).build 将使用您现有的客户端(假设它名为androidClient)并复制其所有设置,只需更改 cookie jar。它在底层使用相同的线程和连接,因此也很高效。
  • 要获取 react-native 使用的所有默认配置并在此基础上进行构建,请使用 OkHttpClientProvider.createClientBuilder() 而不是 new OkHttpClient.Builder()
猜你喜欢
  • 2018-12-27
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2020-03-05
  • 2015-06-13
  • 1970-01-01
  • 1970-01-01
  • 2019-12-10
相关资源
最近更新 更多