HTTP请求仅在释放Android APK时失败



我正在努力使自己的应用程序在Android APK发行版中工作,它失败的唯一场景是生成和签署APK。所有HTTP请求不起作用。(服务器在SSL下运行(

我已经尝试过的所有场景:

  • ionic serve->工作正常。
  • ionic cordova run android --device->工作正常。
  • 也用于模拟器。

也可以很好地生成iOS构建:

  • ionic cordova build ios
  • 在Xcode上,以实现真实设备为目标的构建。
  • 在Xcode上,存档并将其上传到iTunesConnect,然后在Apple接受Apple时从AppStore下载它。

因此,唯一行不通的情况是,当我尝试通过ionic cordova build android --prod --release生成APK并签名时。

Google Play也接受了新的APK,因此包装符号根本没有问题。

由于它在iOS上工作并直接在Android设备上运行,因此它不是CORS或HTTPS证书问题。

代码:

login.ts的摘要:

this.userService.loginUser(this.user).then(
            (data) => {
                let response = data.json();
                loading.dismiss().then(loadData => {
                    if (response.access_token) {
                        this.global.access_token = response.access_token;
                        this.getUserData();
                    }
                });
            }, err => {
                let error = err.json();
                loading.dismiss().then(response => {
                    if (error.message) {
                        this.showToast(error.message, 3000, 'bottom');
                    }
                });
            }
        );

uservice.loginuser方法:

loginUser(data) {
    let headers = new Headers();
    headers.append('Access-Control-Allow-Origin', '*');
    headers.append('auth-token', '*');
    return this.abs.post('/authenticateMobile',
        {
            login_ds_email: data.email,
            login_ds_password: data.pass
        }, headers);
}

其中 abs是:

constructor(http) {
    this.abs = new ApiService(http);
}

apiservice.post方法:

public post(api, params, header): any {
    if (!header) {
        header = this.getHeaders();
    }
    let options = new RequestOptions({headers: header});
    let url = this.global.urlGlobal + api;
    return this.http.post(url, params, options).toPromise();
}

当我发射"登录"按钮并提出请求时,该应用会卡住。服务器没有例外,因此将永远显示加载屏幕。

我已经用完了解决方案,希望你们能帮助我。

离子信息:

global packages:
@ionic/cli-utils : 1.4.0
Cordova CLI      : 6.4.0
Gulp CLI         : CLI version 3.9.1 Local version 3.9.1
Ionic CLI        : 3.4.0
local packages:
@ionic/app-scripts              : 1.3.0
@ionic/cli-plugin-cordova       : 1.4.0
@ionic/cli-plugin-gulp          : 1.0.1
@ionic/cli-plugin-ionic-angular : 1.3.1
Cordova Platforms               : android 6.0.0 ios 4.3.1
Ionic Framework                 : ionic-angular 3.0.1
System:
Node       : v7.8.0
OS         : macOS Sierra
Xcode      : Xcode 8.3.3 Build version 8E3004b
ios-deploy : 1.9.0
ios-sim    : 5.0.6
npm        : 5.0.3

我在一段时间前遇到了完全相同的问题。就我而言,问题是无效的证书。该证书在浏览器中对我来说很好(Chrome甚至显示了iOS上的绿锁(,并在Android上进行了测试。但是我让Android用户抱怨它对他们不起作用。

经过数小时的研究,事实证明,向具有无效证书的网站的请求只是被静静地删除,这意味着没有任何反馈。没有错误,什么都没有。(如果我没记错的话,JS代码刚刚停止执行而无需返回或执行任何回调。(仅在释放模式下构建时才发生。

这里描述了解决方法:

http://ivancevich.me/articles/ignoring-invalid-ssl-certificates-on-cordova-android-ios/

处理它的最佳方法是将证书固定在您的应用中。

我的问题是不完整的SSL链,通过重新配置NGINX以具有此处所述的整个SSL证书链来解决它:http://nginx.org/en/docs/http/configuring_https_servers.html#chains

我的问题也是SSL。如果您从本网站获得" A "评级,则应该有效。我最初的成绩是" B"。 https://www.sslabs.com/ssltest

您可以使用此站点对其进行纠正。https://whatsmychaincert.com/

最新更新