Ionic 3调用HTTP.setSSLCertMode报错提示HTTP插件未安装问题求助
问题原因
- 核心为
@ionic-native/httpnpm包与cordova-plugin-advanced-httpCordova插件版本不匹配。Ionic 3仅兼容4.x版本的@ionic-native/http,若安装5.x及以上版本的npm包,其封装的setSSLCertMode方法无法适配低版本Cordova插件,调用时会触发插件未安装的报错。你删除setSSLCertMode后GET请求可正常执行,是因为基础请求接口在版本不匹配场景下仍有向下兼容实现,setSSLCertMode这类进阶接口未做对应兼容处理,因此仅调用该方法时触发报错。 - 调用逻辑存在时序问题:
setSSLCertMode为异步方法,未等待其执行完成就直接发起GET请求,即使方法可正常调用也可能出现预期外异常。 - 部分过低版本的
cordova-plugin-advanced-http本身未实现setSSLCertMode接口,调用未实现的原生方法时也会抛出插件未安装的错误。
解决方案
- 卸载现有相关依赖:
npm uninstall @ionic-native/http ionic cordova plugin remove cordova-plugin-advanced-http
- 安装适配Ionic 3的匹配版本:
npm install @ionic-native/http@4 --save ionic cordova plugin add cordova-plugin-advanced-http@2.4.0
2.4.0版本为经过验证的兼容版本,不存在API适配问题。
3. 调整调用逻辑,所有操作必须放在platform.ready()回调内,且等待setSSLCertMode执行完成后再发起请求:
this.platform.ready().then(() => { this.http.setSSLCertMode("pinned") .then((res) => { console.log(res) // 证书模式设置成功后再发起请求 return this.http.get("url", {},{}) }) .then((data) => { console.log(data) }) .catch((err) => { console.log(err) }); })
- 验证证书文件放置位置:使用
pinned模式需要提前将站点SSL证书(.cer格式)放到项目www/certificates目录下,缺少对应证书会导致setSSLCertMode执行失败。 - 清理缓存重新构建项目:
ionic cordova platform rm android ionic cordova platform add android # 若使用ios则替换为对应ios命令 npm run build
内容的提问来源于stack exchange,提问作者K. Ajay
相关产品推荐
相关产品推荐

