React Native使用react-native-pdf报ReactNativeBlobUtil请求错误如何解决
问题根因
这个报错是Android平台专属的依赖层异常,和PDF文件本身的解析逻辑无关,触发逻辑如下:
react-native-pdf组件的本地/网络文件拉取能力依赖react-native-blob-util库实现,当该库处理HTTPS请求时,如果代码里开启了自定义证书信任逻辑(比如配置了忽略SSL校验、自定义证书白名单),但没有传入对应的TrustManager实现类,Android系统的网络安全校验机制就会抛出IllegalStateException: Use of own trust manager but none defined异常。
常见触发场景:
- 加载的PDF资源存储在使用自签名SSL证书的HTTPS服务器上,手动修改了
react-native-blob-util的全局网络配置,但没有补全自定义信任管理器的实现 - 本地安装的
react-native-pdf和react-native-blob-util版本不兼容,高版本react-native-blob-util调整了SSL校验的默认传参规则,旧版PDF组件传入的空配置触发了校验逻辑 - Android 12及以上版本的应用未配置网络安全规则,和库的证书校验逻辑产生冲突
修复方案
按优先级从高到低尝试以下方案:
- 版本对齐修复(90%以上的场景可通过该方案解决)
两个依赖的版本不匹配是最高发的诱因,直接锁定兼容的稳定版本重新安装即可:
依赖安装完成后进入Android工程目录执行# npm 用户执行 npm install react-native-pdf@latest react-native-blob-util@0.19.2 # yarn 用户执行 yarn add react-native-pdf@latest react-native-blob-util@0.19.2./gradlew clean清理旧构建缓存,重新打包运行即可。 - 自签名证书场景适配
如果业务确实需要加载存放在自签名证书服务器上的PDF资源,不要直接全局关闭SSL校验,将服务端证书文件放到Android工程的app/src/main/res/raw目录下,在react-native-blob-util的请求配置中传入对应证书的信任规则,不要留空的自定义TrustManager配置项。 - 系统网络安全配置适配
打开Android工程的app/src/main/AndroidManifest.xml文件,在<application>标签上添加属性:
随后在android:networkSecurityConfig="@xml/network_security_config"app/src/main/res/xml目录下新建network_security_config.xml文件,写入对应配置:<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="false"> <trust-anchors> <certificates src="system" /> </trust-anchors> </base-config> <domain-config> <domain includeSubdomains="true">替换为你存放PDF的业务域名</domain> <trust-anchors> <certificates src="system" /> <certificates src="user" /> </trust-anchors> </domain-config> </network-security-config> - 测试环境临时规避(禁止用于生产包)
本地调试阶段如果不想配置证书,可以打开node_modules/react-native-blob-util/android/src/main/java/com/RNReactNativeBlobUtil/RNReactNativeBlobUtilReq.java文件,注释掉自定义TrustManager的初始化代码,强制使用系统默认的证书信任逻辑即可,调试完成后记得回退该修改,避免带来安全风险。
内容的提问来源于stack exchange,提问作者راجہ مخلص
相关产品推荐
相关产品推荐

