2017-06-29 2 views
2

Ich habe Schwierigkeiten, meine App arbeiten auf Android APK Release, das einzige Szenario, das es scheitert, ist bei der Generierung und Unterzeichnung der apk. Alle HTTP-Anfragen funktionieren nicht. (Der Server läuft unter SSL)HTTP-Anfragen scheitert nur bei der Freigabe von Android APK

Alle Szenarien Ich habe bereits versucht:

  • ionic serve -> gut funktioniert.
  • ionic cordova run android --device -> Funktioniert gut.
  • Funktioniert auch auf Emulatoren.

Auch funktioniert das iOS-Build zu erzeugen:

  • ionic cordova build ios.
  • Auf Xcode, Build Build Targeting ein echtes Gerät.
  • Auf Xcode archivieren und hochladen Sie es auf Itunesconnect und laden es dann aus AppStore herunter, sobald es von Apple akzeptiert wird.

Also, der einzige Fall dies nicht der Fall funktioniert, wenn ich zu erzeugen versuchen, es ist apk durch ionic cordova build android --prod --release und es unterzeichnet.

Google Play akzeptiert auch die neue APK, so dass es überhaupt kein Problem mit dem Paketzeichen gibt.

Da es auf iOS funktioniert und direkt auf dem Android-Gerät ausgeführt wird, ist es kein CORS- oder HTTPS-Zertifikatsproblem.

der Code:

Schnipsel 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 Methode:

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); 
} 

Wo abs ist:

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

A piService.post Methode:

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(); 
} 

Die App bleibt stecken, wenn ich fire "Login" -Taste und die Anfrage gestellt wird. Es gibt keine Ausnahme, die vom Server ausgelöst wird, daher wird der Ladebildschirm für immer angezeigt.

Ich habe keine Lösungen mehr und hoffe, dass ihr mir helfen könnt.

Ionic Info:

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 
+0

Die Fehlerfunktion nicht ausgelöst wird - was zu einem Toast Nachricht unten? –

+0

Die Fehlerfunktion wird nicht einmal ausgelöst, es wird auch kein Toast angezeigt. Es war ein Zertifikatproblem, das dazu führte, dass die gesamte App nicht mehr funktionierte. –

Antwort

4

Ich hatte genau dieses gleiche Problem vor einiger Zeit. In meinem Fall war das Problem ein ungültiges Zertifikat. Das Zertifikat sah mir im Browser gut aus (Chrome zeigte sogar die grüne Sperre), auf iOS und beim Testen auf Android. Aber ich hatte Android-Nutzer beschweren, dass es nicht für sie funktionierte.

Nach stundenlanger Recherche stellte sich heraus, dass Anfragen an Webseiten mit ungültigen Zertifikaten einfach stillschweigend fallen gelassen wurden, was bedeutet, dass keinerlei Rückmeldung erfolgt. Keine Fehler, nichts.(Wenn ich mich richtig erinnere, stoppte der js-Code einfach die Ausführung, ohne Callbacks zurückzugeben oder auszuführen.) Dies geschieht NUR beim Erstellen im Release-Modus.

Eine Abhilfe ist hier beschrieben:

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

Der beste Weg, es zu handhaben wäre, das Zertifikat in Ihrer App zu fixieren.

+0

Es war in der Tat ein Zertifikat-Problem, danke für den Tipp über die Problemumgehung! –

+0

Sehr weniger Infos über diese Art von Problemen .. Sie haben meinen Tag gerettet .. Danke .. –

+0

Mann, du hast mein Leben gerettet -_- –

Verwandte Themen