2017-09-25 1 views
0

Ich habe ein seltsames Problem in einem POST-Anruf in iOS mit Nativescript und Angular 4. Ich habe den gleichen Code in Android getestet und funktioniert perfekt. Der Server registriert keinen Fehler, aber der Aufruf schlägt fehl. Dies ist der Code, den ich jetzt bin mit:Angular 4 httpd Post Anruf schlägt in iOS

... 
import { Http, Headers, Response, RequestOptions } from "@angular/http"; 
... 

let headers = new Headers(); 
headers.append("Content-Type", "application/x-www-form-urlencoded"); 
let options = new RequestOptions({ headers: headers }); 
let body = 
    "Username=" + this.username 
    +"&Password=" + this.password; 
this.http.post("http://myserver.com/api/login", body, options) 
    .map(result => result.json()) 
    .subscribe(
     result => { 
      this.loader.hide(); 
      if (result.Authenticated) { 
       // Do something... 
      } 
      else { 
       Dialogs.alert({title: 'Error', message: "Username and/or password are incorrect.", okButtonText: "Close"}); 
      } 
     }, 
     error => { 
      Dialogs.alert({title: 'Error', message: "There was an error trying to send the request, please try again later.", okButtonText: "Close"}); 
     } 
    ) 

Die App zeigt mir There was an error trying to send the request, please try again later. Nachricht, aber es ist kein Fehler in dem Server und die seltsame Sache ist, dass Android funktioniert gut.

Ich habe die enableProdMode() in Angular und kein Glück aktiviert.

Irgendwelche Hilfe bitte?

Danke!

+0

so der Anruf erreicht nie den Server auf ios? – mast3rd3mon

Antwort

2

Wir hatten Abstürze und hängende Probleme auf Nativescript iOS + http Verbindungen bis gestern. Wir wechselten zu https Verbindungen für unsere Server API und alles funktioniert jetzt perfekt.

Vielleicht hat es etwas mit den sicheren/nicht sicheren Verbindungen auf iOS zu tun?

Versuchen Sie, zu einer sicheren Verbindung zu wechseln und sehen Sie, was passiert.

Wenn Sie das nicht tun können, versuchen Sie, diese zu Ihrer info.plist Datei http-Verbindungen zu ermöglichen:

<key>NSAppTransportSecurity</key> 
<dict> 
    <!--Include to allow all connections (DANGER)--> 
    <key>NSAllowsArbitraryLoads</key> 
     <true/> 
</dict> 
+1

Das ist genau was passiert, ich habe das Protokoll auf http geändert und in iOS gearbeitet, nun ist es an der Zeit zu entscheiden, ob wir zu https wechseln oder http beibehalten und diese Regel einfügen. Vielen Dank für Ihre Zeit. – relez

+0

Es scheint, dass iOS 11 keine http-Verbindungen zulassen wird, daher denke ich, dass es eine sichere Sache ist, https zu gehen. –

+0

Noch eine Sache, ich habe versucht, einen https-Aufruf in Android auszuführen und habe viele Fehler, einer von ihnen ist: System.err: verursacht durch: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Vertrauensanker für Zertifizierungspfad nicht gefunden. Irgendeine Idee, wie man es repariert? – relez