我正在使用离子3,我做了一个应用程序来消耗odoo的web服务,为此我用了一个npm包:odoo-xmlrpc。
它适用于android,但是当我模拟iPhone时,它无法与服务器连接。我尝试了手动连接,但它没有工作,它显示XHR错误,但没有显示错误。
我使用了一个嗅探器(查尔斯)来向我展示http包,我得到了一些信息。它尝试使用OPTIONS方法进行连接,但服务器请求是404而不是FOUND。
你可以在这里看到我所有的代码:https://github.com/jose1914luis/rusia
我的配置:
离子信息:
cli packages: (/usr/local/lib/node_modules)
@ionic/cli-utils : 1.19.0
ionic (Ionic CLI) : 3.19.0
global packages:
cordova (Cordova CLI) : 7.1.0
local packages:
@ionic/app-scripts : 3.1.6
Cordova Platforms : ios 4.5.4
Ionic Framework : ionic-angular 3.9.2
System:
ios-deploy : 1.9.0
ios-sim : 5.0.13
Node : v9.3.0
npm : 5.6.0
OS : macOS Sierra
Xcode : Xcode 8.2.1 Build version 8C1002
Environment Variables:
ANDROID_HOME : not set
Misc:
backend : pro
离子代码:
import { Component, enableProdMode } from '@angular/core';
import { NavController } from 'ionic-angular';
import { Http } from '@angular/http'
import 'rxjs/Rx';
import 'rxjs/add/operator/map';
import xmlrpc from 'xmlrpc';
import url from 'url';
import * as Odoo from 'odoo-xmlrpc'
enableProdMode();
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
msg = '';
config = {url:'http://moscutourgratis.com',
port:'8069',
db:'Tour_Gratis_Rusia',
username:'xxxx',
password:'xxxx'};
constructor(public navCtrl: NavController, public http: Http) {
this.cargar();
}
cargar(){
var self = this;
var odoo = new Odoo(self.config);
//Fail method with odoo-xmlrpc
odoo.connect(function(err){
if(err){
self.msg += JSON.stringify(err);
console.log(JSON.stringify(err));
return JSON.stringify(err);
}
self.msg += 'entro';
});
//manual connection Fail show XHR Error
this.connect(function(err){
self.msg += 'error interno' + JSON.stringify(err);
});
}
connect(callback){
var urlparts = url.parse(this.config.url);
var host = urlparts.hostname;
var port = this.config.port || urlparts.port;
var db = this.config.db;
var username = this.config.username;
var password = this.config.password;
var secure = true;
if(urlparts.protocol !== 'https:') {
secure = false
}
var uid = 0;
var clientOptions = {
host: host,
port: port,
path: '/xmlrpc/2/common'
}
var client;
if(secure == false) {
client = xmlrpc.createClient(clientOptions);
console.log("client normal")
}
else {
client = xmlrpc.createSecureClient(clientOptions);
console.log(clientOptions)
console.log("client sécurisé sur le port " + port)
}
var params = [];
params.push(db);
params.push(username);
params.push(password);
params.push({});
client.methodCall('authenticate', params, function(error, value) {
if(error){
console.log('HOLA MUNDO ERROR DE MIERDA' + error);
return callback(error, null)
}
uid = value;
return callback(null)
});
}
}
查尔斯http包:
在花了2周时间解决这个问题之后,我改变了odoo-ionic-xml-rpc的库。它都不起作用。我发现请求在标题中返回原点null另外离子> 3已集成wkwebview,this has some problems:
基本上你需要Downgrade to UIWebView,它的工作原理。
修改后的config.xml:
<preference name="CordovaWebViewEngine" value="CDVUIWebViewEngine" />
卸载cordova-plugin-ionic-webview:
$ ionic cordova plugin remove cordova-plugin-ionic-webview --save
$ rm -rf platforms/
$ rm -rf plugins/
$ ionic cordova build ios