$ ionic cordova plugin add cordova-plugin-http
$ npm install --save @ionic-native/http
实现是:
constructor(private https: HTTP ) {
}
this.https.get('http://ionic.io', {}, {})
.then(data => {
this.httpData =data;
console.log(data.status);
})
.catch(error => {
console.log(error.status);
});
我收到此错误:
[[20:49:03] console.warn:本机:尝试调用HTTP.get,但未安装HTTP插件。[20:49:03] console.warn:安装HTTP插件:“ ionic插件添加cordova-plugin-http”
如果您不想像@alpere所建议的那样修改ionic-native插件,或者解决方案不起作用,您可以始终使用无ionic-native的cordova插件。为此,请在导入文件的下方添加以下内容,以告知打字稿http
句柄存在:
declare var http;
然后像这样使用它:
http.get(
'https://ionic.io/',
{},
{},
response => {
console.log(response.status);
},
response => {
console.error(response.error);
},
);
请注意,不需要this
,因为cordova插件是在全局范围内定义的。使用没有离子型原生包装器的插件的缺点是,您会松散漂亮的类型注释,承诺回调,并且在某些情况下,您将不得不自己触发角度变化检测。
您是否曾经在平台准备就绪后尝试调用插件然后检查平台?
async checkVersion() {
const ready = !!await this.platform.ready();
if (ready && this.platform.is('cordova')) {
// try to add your code here
}
}
ionic的主分支已修复插件参考:'cordova.plugin.http',问题,
如果问题仍然存在,或者您不想更改源文件,请尝试以下步骤,它对我有用。
删除现有版本
rm -rf node_modules/ platforms/ plugins/ www/
将离子库更新到最新版本:
npm i --save ionic-native@latest
((如果有问题,请检查其他插件的依赖性,请尝试通过虚拟环境设置-https://github.com/ekalinin/nodeenv隔离软件包:
添加所有必需的插件和http插件::
ionic cordova plugin add cordova-plugin-advanced-http
然后终于需要您的插件和http插件
npm install @ionic-native/http
现在您构建的iOS或android应该会检测所有插件
Ionic Native HTTP更改了他们正在使用的cordova插件,因为旧的插件已经有一段时间没有更新了。在更改期间,对插件的引用尚未更新,因此已损坏。(请参阅:https://github.com/silkimen/cordova-plugin-advanced-http/issues/8)
您可以通过将引用的旧插件更改为新插件来修复它:(提交后也更新插件将解决此问题)
在@ ionic-native / plugins / http / index.ts:
更改:
pluginRef: 'cordovaHTTP',
至:
pluginRef: 'cordova.plugin.http',
请参阅提交:https://github.com/ionic-team/ionic-native/commit/49ee0d85a304770a9a3bd3e04eb9609e6d565b67
可能是这三个问题中的任何一个引起的:
Ionic3 Cordova SSL固定示例
https://github.com/sijovijayan/SSL-pinning-with-ionic-cordova-example
在此示例中,您将了解如何实现SSL固定和如何生成.cer文件
尝试按照错误消息中的建议运行以下命令以安装HTTP plugin
ionic plugin add cordova-plugin-http
我将切换到Angular的HTTP而不是Cordova HTTP。优势:不需要任何插件。
package.json:
"dependencies": {
...
"@angular/http": "4.1.3",
...
}
app.module.ts:
import { Http, HttpModule } from '@angular/http';
...
@NgModule({
declarations: [
MyApp,
],
imports: [
...
HttpModule,
...
]...
正在调用.ts-class:
import { Http } from '@angular/http';
...
constructor(... , public http: Http, ...) {
//Example: .get for a JSON and map it:
this.http.get(url).map(res => res.json()).subscribe(data => {
this.data = data;
});
}
第一评论的答案:
[您似乎需要SSL固定,但我尚未在Angular HTTP中找到一种简单的方法,我发现您添加cordova插件的命令与文档中的命令有些不同:
您写道:
ionic cordova plugin add cordova-plugin-http
现在命令似乎是:
ionic cordova plugin add cordova-plugin-advanced-http
([https://ionicframework.com/docs/native/http/)
如您所见,它通过enableSSLPinning(enable)
之类的方法满足了您的需求。
如果从PC运行该应用程序,则可能会出现此类错误。尝试使用ionicdev
Ionic本机插件取决于设备功能。因此,由于使用了诸如http之类的插件,联系人或相机无法在您的浏览器上运行。此类错误的示例是
Native: tried calling HTTP.post, but Cordova is not available. Make sure to include cordova.js or run in a device/simulator
因此,请尝试在此处获取ionic的应用程序以开发应用程序https://play.google.com/store/apps/details?id=io.ionic.devapp
我有同样的问题。通过声明Angular的HTTP模块,我设法摆脱了该错误。在app / app.modules.ts
import { HttpClientModule } from '@angular/common/http';
@NgModule({
imports: [
// import HttpClientModule after BrowserModule.
HttpClientModule,
],
})
即使我不使用Angular的模块,也解决了我的问题。