如何连接odoo(xmlrpc)与ios上的离子运行?

问题描述 投票:-1回答:1

我正在使用离子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包:

enter image description here

ios ionic-framework mobile openerp ionic3
1个回答
0
投票

在花了2周时间解决这个问题之后,我改变了odoo-ionic-xml-rpc的库。它都不起作用。我发现请求在标题中返回原点null另外离子> 3已集成wkwebview,this has some problems

  • 我无法实现CORS。遗憾的是,没有API可以禁用此功能,因此您需要确保应用程序使用的任何远程API,正确实现CORS:CORS MDN
  • XHR请求不起作用 - 我试图使用XHR(或fetch)调用某些远程服务,但它无法正常工作。正如我们之前所说,WKWebView强制执行CORS。您需要将http://localhost:8080列入“Origin”白名单和/或正确实施CORS。

基本上你需要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
© www.soinside.com 2019 - 2024. All rights reserved.