2014-07-08 16 views
7

Ich versuche derzeit, meinen Code von NSURLConnection zu NSURLSession zu ändern. Eine Sache, die mich verwirrt, ist Authentifizierung.Swift NSURLSession und Authentifizierung

Mein Dienst, den ich zu verbinden versuche, ist einfach authentifiziert.

In meinem früheren Code hatte ich das folgende Verfahren durch Protokoll NSURLConnectionDataDelegate Umsetzung:

func connection(connection:NSURLConnection!, willSendRequestForAuthenticationChallenge challenge:NSURLAuthenticationChallenge!) { 
    if challenge.previousFailureCount > 1 { 

    } else { 
     let creds = NSURLCredential(user: usernameTextField.text, password: passwordTextField.text, persistence: NSURLCredentialPersistence.None) 
     challenge.sender.useCredential(creds, forAuthenticationChallenge: challenge) 
    } 
} 

Jetzt stecken ich bin.

  • Muss ich NSURLSessionDelegate.didReceiveChallenge implementieren?
  • Wenn ja, wie handhabe ich mit dem Beendigungshandler?
  • In Apple Developer Reference ich die folgende Zeile unter didReceiveChallenge

    Wenn Sie diese Methode nicht implementieren gefunden haben, ruft die Sitzung URLSession der seine Delegierten: Aufgabe: didReceiveChallenge: completionHandler: Methode statt.

  • Was bedeutet das?

Antwort

7

Ja,

Wenn Sie seiner Delegierten URLSession nicht NSURLSessionDelegate.didReceiveChallenge Methode implementieren, ruft die Sitzung: Aufgabe: didReceiveChallenge: completionHandler: Methode statt.

besser zu implementieren beide

func URLSession(session: NSURLSession!, didReceiveChallenge challenge: NSURLAuthenticationChallenge!, completionHandler: ((NSURLSessionAuthChallengeDisposition, NSURLCredential!) -> Void)!) { 

    if challenge.protectionSpace.authenticationMethod.compare(NSURLAuthenticationMethodServerTrust) == 0 { 
     if challenge.protectionSpace.host.compare("HOST_NAME") == 0 { 
      completionHandler(.UseCredential, NSURLCredential(forTrust: challenge.protectionSpace.serverTrust)) 
     } 

    } else if challenge.protectionSpace.authenticationMethod.compare(NSURLAuthenticationMethodHTTPBasic) == 0 { 
     if challenge.previousFailureCount > 0 { 
      println("Alert Please check the credential") 
      completionHandler(NSURLSessionAuthChallengeDisposition.CancelAuthenticationChallenge, nil) 
     } else { 
      var credential = NSURLCredential(user:"username", password:"password", persistence: .ForSession) 
      completionHandler(NSURLSessionAuthChallengeDisposition.UseCredential,credential) 
     } 
    } 

} 

func URLSession(session: NSURLSession!, task: NSURLSessionTask!, didReceiveChallenge challenge: NSURLAuthenticationChallenge!, completionHandler: ((NSURLSessionAuthChallengeDisposition, NSURLCredential!) -> Void)!){ 

    println("task-didReceiveChallenge") 

    if challenge.previousFailureCount > 0 { 
     println("Alert Please check the credential") 
     completionHandler(NSURLSessionAuthChallengeDisposition.CancelAuthenticationChallenge, nil) 
    } else { 
     var credential = NSURLCredential(user:"username", password:"password", persistence: .ForSession) 
     completionHandler(NSURLSessionAuthChallengeDisposition.UseCredential,credential) 
    } 


} 
Verwandte Themen