2016-08-10 4 views
0

Ich habe den folgenden Curl-Befehl, der in der Befehlszeile funktioniert, aber ich kann es nicht in Swift schreiben.Wie schreibe ich Curl-Befehl in Swift mit Alamofire?

Wenn ich versuche, dies in Alamofire zu übersetzen, erhalte ich immer einen Fehler vom Server. Also ich nehme an, dass die Auth funktioniert gut, aber etwas mit dem Parameter ist nicht korrekt, da ich 5 Parameter an den Server senden muss. Wie kann ich das genau machen? Hier

ist der Code-Schnipsel:

func loginWithFacebook(loginEmail: String, facebookId: String, accessToken: String,familyName: String, givenName: String, completionHandler: (AnyObject?, NSError?) ->()) { 

    //Basic HTTP auth 
    let user = "web" 
    let password = "web" 

    // let headers = ["Authorization": "Basic \(base64Credentials)"] not working 
    // let headers = ["web": "web"] not working 

    //example for a nested array query 
    let parameters = [ 
      "loginEmail": loginEmail, 
      "facebookId": facebookId, 
      "accessToken": accessToken, 
      "familyName": familyName, 
      "givenName": givenName 
    ] 

    Alamofire.request(
     .POST, 
     loginWithFacebook, 
     parameters: parameters 
     ) 
     .responseJSON { response in 
      switch response.result { 
      case .Success(let value): 
       completionHandler(value, nil) 
      case .Failure(let error): 
       completionHandler(nil, error) 
      } 
     } 
     .authenticate(user: user, password: password) 
} 

ich diese Methode auf folgende Weise aufrufen:

self.restApi.loginWithFacebook(email, facebookId: facebookId, accessToken: accessToken, familyName: familyName, givenName: firstName) {responseObject, error in 

     print("responseobject printed loginUserWithFacebook() ") 
     print(responseObject) 
     print("error printed") 
     print(error) 

     //get the JSON object 
     let response = responseObject as? [String:AnyObject] 
     print("response") 
     print(response) 

     //parse down the first layer of JSON object which is an NSDictionary (sometimes it is [AnyObject]) 
     if let result = response!["result"] as? [String: AnyObject] 
     { 
      print("self.result.count after calling loginUserWithFacebook()") 
      print(result.count) 
      print(result) 

      // self.getProfileFromUser() 
     } 
    } 

Der Fehler Antwort vom Server:

responseobject printed loginUserWithFacebook() 
Optional({ 
info = "Required fields missing."; 
result =  { 
}; 
}) 

Antwort

1

In Ihrem cURL Anfrage, der Körper ist JSON. Ihr Alamofire-Code sendet die Anfrage jedoch mithilfe von URL-codierten Parametern. Versuchen Sie JSON anstelle:

Alamofire.request(
    .POST, 
    loginWithFacebook, 
    parameters: parameters, 
    encoding: .JSON 
    ) 

Beachten Sie auch, dass Ihre cURL Anforderung verwendet die Schlüssel email und fbId, aber Ihr Alamofire Code verwendet loginEmail und facebookId. Möglicherweise müssen Sie diese auch ändern, wenn Ihr Server beides nicht unterstützt.

+0

Vielen Dank! Das funktioniert großartig. –