我正在努力让我的应用在Android APK版本上正常运行,唯一失败的情况是生成并签名了apk。所有http请求均无效。(服务器在SSL下运行)
我已经尝试过的所有方案:
ionic serve
->工作正常。ionic cordova run android --device
->工作正常。也可以很好地生成iOS版本:
ionic cordova build ios
。因此,唯一不起作用的情况是当我尝试通过apk生成ionic cordova build android --prod --release
并签名时。
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');
}
});
}
);
userService.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
我前段时间也遇到过同样的问题。就我而言,问题是证书无效。在iOS上以及在Android上进行测试时,该证书在浏览器中看起来都很不错(chrome甚至显示了绿色锁定)。但是我让Android用户抱怨这对他们不起作用。
经过数小时的研究,事实证明,对带有无效证书的网站的请求只是被静默丢弃,这意味着没有任何反馈。没有错误,没事。(如果我没记错的话,js代码只是停止执行而没有返回或执行任何回调。)只有在发布模式下构建时才会发生这种情况。
一种解决方法在这里描述:
http://ivancevich.me/articles/ignoring-invalid-ssl-certificates-on-cordova-android-ios/
最好的方法是将证书固定在您的应用程序中。
确实是证书问题,谢谢您提供有关解决方法的提示!
关于此类问题的信息很少。.您节省了我的时间..谢谢..
男人,你救了我的命-_-
您如何验证这是无效的证书?我有同样的问题,但是站点证书在浏览器上可以正常工作,并且ssl检查告诉我该证书有效。但我已经看到问题仅发生在<5.1的android设备上
@Francesco我也遇到相同的问题,其中请求在Android 5以下无法正常工作。您找到该问题的任何解决方案了吗?我也做了一个SSL检查,看起来还不错。