$ 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:Native:尝试调用HTTP.get,但未安装HTTP插件。 [20:49:03] console.warn:安装HTTP插件:'离子插件添加cordova-plugin-http'
答案 0 :(得分:4)
如果您不想修改@alpere建议的离子 - 原生插件,或者如果解决方案不起作用,您可以始终使用没有离子原生的cordova插件。为此,请通过在导入下方的某处添加以下内容来告诉typescript http
句柄存在:
declare var http;
然后像这样使用它:
http.get(
'https://ionic.io/',
{},
{},
response => {
console.log(response.status);
},
response => {
console.error(response.error);
},
);
请注意,不需要this
,因为cordova插件是在全局范围内定义的。使用没有离子原生包装的插件的缺点是你松开了漂亮的类型注释,承诺回调,在某些情况下你必须自己触发角度变化检测。
答案 1 :(得分:3)
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
答案 2 :(得分:1)
这可能是由以下三个问题引起的:
答案 3 :(得分:1)
Ionic3 Cordova SSL钉扎示例
https://github.com/sijovijayan/SSL-pinning-with-ionic-cordova-example
在此示例中,您将了解如何实现SSL固定以及如何生成.cer文件
答案 4 :(得分:0)
尝试按照错误消息中的建议运行以下命令以安装HTTP plugin
ionic plugin add cordova-plugin-http
答案 5 :(得分:0)
我会切换到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 Pinning而我在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)
等方法支持您的需求。
答案 6 :(得分:0)
如果从PC运行该应用程序,则可能会出现此类错误。 尝试使用ionicdev
答案 7 :(得分:0)
离子本机插件取决于设备功能。因此,由于使用了诸如http之类的插件,联系人或相机无法在您的浏览器上运行。这种错误的一个例子是
Native: tried calling HTTP.post, but Cordova is not available. Make sure to include cordova.js or run in a device/simulator
因此,请尝试在https://play.google.com/store/apps/details?id=io.ionic.devapp上获取ionic的应用程序以开发应用程序
答案 8 :(得分:0)
我有同样的问题。通过声明Angular的HTTP模块,我设法摆脱了这个错误。 在app / app.modules.ts
中import React from 'react';
import ApolloClient from 'apollo-client';
import { ApolloProvider } from 'react-apollo';
import { createUploadLink } from 'apollo-upload-client';
import { InMemoryCache } from 'apollo-cache-inmemory';
import { ApolloLink, Observable, split } from 'apollo-link';
import { WebSocketLink } from 'apollo-link-ws';
import { getMainDefinition } from 'apollo-utilities';
const cache = new InMemoryCache();
const request = async (operation) => {
const token = localStorage.getItem('token');
operation.setContext({
headers: {
authorization: token ? `Bearer ${token}` : '',
},
});
};
const httpLink = createUploadLink({ uri: 'http://localhost:3001/graphql' });
// Create a WebSocket link:
const wsLink = new WebSocketLink({
uri: 'ws://localhost:3001/subscriptions',
options: {
reconnect: true
},
});
// using the ability to split links, you can send data to each link
// depending on what kind of operation is being sent
const link = split(
// split based on operation type
({ query }) => {
const { kind, operation } = getMainDefinition(query);
return kind === 'OperationDefinition' && operation === 'subscription';
},
wsLink,
httpLink,
);
const requestLink = new ApolloLink((operation, forward) =>
new Observable((observer) => {
let handle;
Promise.resolve(operation)
.then(oper => request(oper))
.then(() => {
handle = forward(operation).subscribe({
next: observer.next.bind(observer),
error: observer.error.bind(observer),
complete: observer.complete.bind(observer),
});
})
.catch(observer.error.bind(observer));
return () => {
if (handle) handle.unsubscribe();
};
}));
const apolloClient = new ApolloClient({
link: ApolloLink.from([
requestLink,
link,
]),
cache,
});
export const withApolloClient = App => (
<ApolloProvider client={apolloClient}>
<App client={apolloClient} />
</ApolloProvider>
);
export default apolloClient;
即使我不使用Angular的模块,也能解决我的问题。
答案 9 :(得分:0)
您是否曾经尝试在平台准备就绪后调用插件,然后检查平台?
async checkVersion() {
const ready = !!await this.platform.ready();
if (ready && this.platform.is('cordova')) {
// try to add your code here
}
}
答案 10 :(得分:0)
ionic的master分支已修复插件参考:“ 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应该会检测所有插件