2016-04-10 3 views
0

Ich habe mit diesem Problem für ein paar Tage jetzt gekämpft, aber immer noch keine Lösung gefunden. Im Grunde habe ich eine POST NSURLRequest mit Alamofire machen und Benutzer und Passwort als json in der Anfrage Körper senden, so dass ich eine Session-Token in der Antwort empfangen kann:NSURLRequest gibt das korrekte Ergebnis auf iPhone 5s und neuer, aber scheitert auf iPhone 4s und 5

let mutableURLRequest = NSMutableURLRequest(URL: NSURL(string: path)!) 
mutableURLRequest.HTTPMethod = "POST" 
mutableURLRequest.setValue("application/json", forHTTPHeaderField:"Content-Type") 
switch self { 
case AuthenticateApp: 
    let parameters = [ 
    "method": "login", 
    "params": [ 
     "user": user, 
     "password": pass 
    ] 
    ] 
mutableURLRequest.HTTPBody = try! NSJSONSerialization.dataWithJSONObject(parameters, options: []) 
case ... 

Mein Problem ist, dass der Antrag auf iphone nur dann erfolgreich ist 5s und oben, während ich eine Fehlermeldung erhalten, wenn die gleiche Anforderung auf iphone 4s oder 5 ausgeführt wird:

{ 
    "error" : "Login or password was invalid.", 
    "code" : 1 
} 

ich versucht habe, Druck und mehrere Sache Überprüfung aber keine Bilder zu diesem Punkt mich über die an die Quelle würde Problem. Ich habe die Lösung in NSHTTPURLResponse different on iPhone 5 vs 5s und hinzugefügt, um den Code unten auf die Anforderung gegeben versucht, aber es hat nicht geholfen:

mutableURLRequest.setValue("gzip", forHTTPHeaderField:"Content-Encoding") 

ich die Antwort-Header-Felder für iphone gedruckt habe 5 und 5 s und keine Unterschiede gefunden. Es sieht so aus, als ob der Server den Benutzernamen und das Passwort nicht im richtigen Format erhält. Der Benutzername enthält das "@" Symbol. Könnte das für das Problem verantwortlich sein?

UPDATE:

Ein guter Samariter von der Apple-Entwickler-Forum wies mich in die richtige Richtung - die Anträge von einem 32-Bit-Geräte aus irgendeinem Grund vom Server zurückgewiesen werden. Ich habe keine Ahnung, wie man das an dieser Stelle beheben kann ...

+0

Könnten Sie unterschiedliche Passwort und Benutzer haben. Möglicherweise bemerkt der Server, dass das Passwort/Benutzer bereits verwendet wird. – gnasher729

+0

Der Benutzer/das Passwort ist jedes Mal gleich. Ich logge mich nicht als Benutzer ein, sondern autorisiere die App als Admin. –

Antwort

2

Ich habe es endlich geschafft, dieses Problem zu beheben. Es stellt sich heraus, dass der Antrag Körper, wenn sie auf json analysiert, wie diese auf 64-Bit aussieht:

{ 
    "method": "login", 
    "params": { 
    "user": "user", 
    "password": "password" 
    } 
} 

während auf 32-Bit sieht es wie folgt aus:

{ 
    "params": { 
    "password": "password", 
    "user": "user" 
    }, 
    "method": "login" 
} 

Ja, der Server, Aus Gründen, die nicht bekannt sind, müssen die Parameter in einer bestimmten Reihenfolge aufgelistet werden, sonst wird es Bananen. Danke nochmal, für die Hilfe.

+0

'Parameter' ist ein Wörterbuch. Wörterbücher sind ungeordnete Sammlungen: keine voraussagbare Reihenfolge, unabhängig von der Plattform. – Moritz

+0

noch, aus irgendeinem Grund, die Backend-API, die ich anschließe, um die resultierende JSON-Datei wie ein Array zu behandeln. –