【问题标题】:How connect odoo (xmlrpc) with ionic running over ios?如何将odoo(xmlrpc)与在ios上运行的离子连接?
【发布时间】:2017-12-19 20:21:22
【问题描述】:

我正在使用 ionic 3,我做了一个应用程序来使用来自 odoo 的 Web 服务,为此我使用了一个 npm 包:odoo-xmlrpc

它在安卓上运行良好,但是当我为 iPhone 模拟时,它无法连接到服务器。我尝试了手动连接,但没有成功,它显示 XHR 错误,但没有准确显示错误。

我使用嗅探器(查尔斯)向我展示了 http 包,我得到了一些信息。它尝试使用 OPTIONS 方法连接,但服务器请求是 404 not 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)
        });
    }

}

Charles http 包:

【问题讨论】:

  • 问题标题应该是对问题的简要描述,而不仅仅是关键字列表。

标签: ios ionic-framework mobile openerp ionic3


【解决方案1】:

在花了 2 周时间解决这个问题后,我将库更改为 odoo-ionic-xml-rpc。也没有用。我发现请求在 header 中返回原点 null 另外 ionic >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 并且它有效。

修改confi.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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 2016-01-04
    相关资源
    最近更新 更多