Cordova HttpClient调用在IOS设备中失败,但可在Androids中使用

时间:2018-10-29 19:26:07

标签: ios cordova

我知道这是在HTTPS request fails only on iOS, Ionic 2之前被问到的,但是这些答案对我来说不起作用。

我已经在ios xcode10项目的[myproject] -info.plist文件中进行了以下设置

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>

在我的项目中没有安装here的wkwebview插件,而是在我的项目中安装了ionic-webview-plug。

端点是Windows服务器中托管的MVC控制器操作方法。我无法像我进行Android测试那样使用chrome:// inspect从Windows调试IOS应用程序。虽然该App能够访问其他静态链接(例如图像),但是此Web服务调用失败。

在下面的Angular代码中,介绍了如何使用HttpClient进行Web服务调用

var oDat = {
uuid: uuid
};
let headers = new HttpHeaders();
headers = headers.set(‘Content-Type’, ‘application/json; charset=utf-8’);
return this.http.post(this.apiUrl23, JSON.stringify(oDat), {headers: headers}).pipe(
map(this.extractData),
catchError(this.handleError)
);

以下是从页面触发的此类订阅者代码之一

  this.horoService.getPlan(this.device.uuid)
           .subscribe(res => {
                this.info2 = '';
                let pln: Plan = { uuid: res['uuid'], name: res['name'], credits: res['credits'], dobs: res['dobs'] };
                this.plan = pln;
                if(res['name'] == 'xxx.xxx.xxx.xxx'){
                    this.showSU = true;
                    this.showCR = false;
                    this.showASU = false;
                } else if(Number(res['credits']) == 0) {
                    this.showSU = false;
                    this.showCR = true;
                    this.showASU = false;
                } else {
                    this.showSU = true;
                    this.showCR = false;
                    this.showASU = true;
                }
            }, (err) => {
                    this.showSU = false;
                    this.showCR = false;
                    this.showASU = false;
                this.info2 = JSON.stringify(err);
            });    

下面是我的项目中使用的Cordova版本

Ionic:
   ionic (Ionic CLI)  : 4.2.1 (C:\Users\Hamsini\AppData\Roaming\npm\node_modules\ionic)
   Ionic Framework    : ionic-angular 3.9.2
   @ionic/app-scripts : 3.2.0

Cordova:

   cordova (Cordova CLI) : 8.0.0
   Cordova Platforms     : android 6.3.0, ios 4.5.5
   Cordova Plugins       : cordova-plugin-ionic-keyboard 2.1.2, cordova-plugin-ionic-webview 1.2.1, (and 12 other plugins)

该版本是在xCode10上构建的,并在ipad 9.3.5版上进行了测试

有猜到吗?

UPDATE-30 / 10 当我使用离子服务运行时,我可以看到HTTPResponse正确返回,但是在.subscribe(err)处理程序中,它显示了未知URL,未知错误

1 个答案:

答案 0 :(得分:1)

我正在回答自己的问题,因为这可能会对某人有所帮助。

downgrading to UIWebView似乎已解决之后,问题似乎出在WKWebView上

在科尔多瓦解决问题之前,现在需要执行以下步骤

post非常详细地介绍了xCode10和Cordova的兼容性问题,自发布以来已有一段时间了,而Cordova的人还没有提出解决方案,解决方法是在构建过程中忽略新的体系结构,在iOS上的部署过程并不复杂,因为它更多地依赖于MAC平台XCode,因此在使用以下命令行进行构建之后

ionic cordova build ios -- --buildFlag="-UseModernBuildSystem=0"

您还必须确保在xCode构建设置中选择“旧版构建系统” ,如图herehere

所示。

但是由于这种降级,可能还会导致其他副作用,例如,在应用程序中轻击App中的SVG图像的某些部分无法正常工作(以前在Android设备上可以正常使用,对于该设备甚至动态地附加了侦听器)如果这是由于降级的原因,因为它不仅仅适用于iOS设备,因为我之前从未在其他任何iOS设备中测试过此应用程序