2016-04-06 6 views
6

Ich habe eine URL https://203.xxx.xxx.xxx. Diese URL wird für unsere nur zu Testzwecken verwendet.UIWebview.loadURL() aber URL ist ein selbstsigniertes Zertifikat. Swift iOS

Ich möchte diese URL in UIWebview in Swift2.0 laden. Aber leider! Das Zertifikat ist abgelaufen.

Ich habe das gleiche erfolgreich in Android, aber Probleme in Swift.

Bitte führen .....


Was habe ich bisher zu tun !!


01. Defined AppTransportSecurity in info.plist 

    <key>NSAppTransportSecurity</key> 
      <dict> 
       <key>NSAllowsArbitraryLoads</key> 
       <true/> 
      </dict> 
  1. versucht, mit Verbindung (canAuthenticateAgainstProtectionSpace) & Verbindung (willSendRequestForAuthenticationChallenge)

aber nicht gelang.


Was passiert, wenn ich die gleiche URL in Safari laden ??


Fehler sagt: Safari cannot verify the IDENTITY

in Umgehung dieser Hilfe brauchen.


auch versucht, einige Links: (Dies könnte die Lösung sein)

@implementation NSURLRequest (NSURLRequestWithIgnoreSSL) 

+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host 
{ 
    return YES; 
} 

@end 

Aber wie das 2.0 in Swift zu implementieren? Wenn ich falsch liege, bitte in Swift richtig führen.

Antwort

7

bekam schließlich die Antwort wie:

Schritt 1 >>import SafariServices

Schritt 2 >> Verwenden NSURLConnectionDelegate mit Ihrem Viewcontroller dh

class ViewController:UIViewController, NSURLConnectionDelegate

Schritt 3 >> Aufschalten Methoden:

func connection(connection: NSURLConnection, canAuthenticateAgainstProtectionSpace protectionSpace: NSURLProtectionSpace?) -> Bool 

func connection(connection: NSURLConnection, willSendRequestForAuthenticationChallenge challenge: NSURLAuthenticationChallenge) 

Schritt 4 >> GOTO viewDidLoad wo Ihre URL in der Webview zu laden, & Änderungen vornehmen:

let url = NSURL (string: URL)//where URL = https://203.xxx.xxx.xxx 
let requestObj = NSURLRequest(URL: url!) 
var request: NSURLRequest = NSURLRequest(URL: url!) 
var connection: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: false)! 
connection.start() 
YOUR_WEBVIEW.loadRequest(requestObj); 

Schritt 5 >> GOTO webView mit should & return true. Wenn Sie falsch zurückgeben, erhalten Sie nie die Ergebnisse.

func webView(IciciWebView: UIWebView!, shouldStartLoadWithRequest request: NSURLRequest!, navigationType: UIWebViewNavigationType) -> Bool 
{ 
//Do whatever you want to do. 

return true 
} 

Schritt 6 >> die Funktion Aktualisieren:

func connection(connection: NSURLConnection, canAuthenticateAgainstProtectionSpace protectionSpace: NSURLProtectionSpace?) -> Bool 
    { 
     print("In canAuthenticateAgainstProtectionSpace"); 

     return true; 
    } 

Schritt 7 >> die Funktion Aktualisieren:

func connection(connection: NSURLConnection, willSendRequestForAuthenticationChallenge challenge: NSURLAuthenticationChallenge) 
    { 
     print("In willSendRequestForAuthenticationChallenge.."); 
     challenge.sender!.useCredential(NSURLCredential(forTrust: challenge.protectionSpace.serverTrust!), forAuthenticationChallenge: challenge) 
     challenge.sender!.continueWithoutCredentialForAuthenticationChallenge(challenge) 

    } 

Referenzen: Entwickler Referenzen von Swift, viele Seiten von Stackoverflow, & einige Foren von Google.

Diese Schritte behoben meine Probleme & jetzt kann ich die selbstsignierte URL in einer Webansicht laden.

+2

In Schritt 4, warum haben beide "Anfrage" und "RequestObj"? – kdazzle