2016-04-06 14 views
6

Bir URL var https://203.xxx.xxx.xxx. Bu URL, Test amaçlı kullanmamız içindir.UIWebview.loadURL() ancak URL, kendinden imzalı bir sertifikadır. Swift iOS

Bu URL'yi UIWebview uygulamasına Swift2.0'da yüklemek istiyorum. Ama alas! Sertifika süresi doldu.

Aynı şeyi başarılı bir şekilde Android'de yaptım ancak Swift'de sorun yaşadım.

kılavuz Lütfen .....


i bugüne kadar ne yaptı !!


01. Defined AppTransportSecurity in info.plist 

    <key>NSAppTransportSecurity</key> 
      <dict> 
       <key>NSAllowsArbitraryLoads</key> 
       <true/> 
      </dict> 
  1. bağlantısı (canAuthenticateAgainstProtectionSpace) & bağlantı (willSendRequestForAuthenticationChallenge)

kullanarak çalıştı Ama başarılı olamadı.


i Safari'de aynı URL'yi yüklemek ne olur ??


Hata diyor:

Safari cannot verify the IDENTITY bu atlayarak yardıma mı ihtiyacınız var.


Ayrıca bazı bağlantılar çalıştı: (Bu olabilir çözüm)

@implementation NSURLRequest (NSURLRequestWithIgnoreSSL) 

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

@end 

Ama nasıl Swift 2.0 Bu uygulamaya? Eğer yanılıyorsam, Swift'de doğru şekilde kılavuzluk edin. senin ViewController yani

class ViewController:UIViewController, NSURLConnectionDelegate

Adım 3 >> geçersiz kılma yöntemleri ile

Adım 1 >>import SafariServices

Adım 2 >> Kullanım NSURLConnectionDelegate:

cevap

7

Nihayet olarak cevabı var

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

func connection(connection: NSURLConnection, willSendRequestForAuthenticationChallenge challenge: NSURLAuthenticationChallenge) 
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); 

Adım 5 >> GOTO Web görünümü shouldStartLoadWithRequest & dönüş ile gerçek: değişiklikleri yapın, Web görünümü içinde & URL yüklemek içinAdım 4 >> GOTO viewDidLoad. Eğer yanlış döndürürsen, asla sonuçlara ulaşamazsın.

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

return true 
} 

Adım 6 >> işlevini güncelle:

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

     return true; 
    } 

Adım 7 >> işlevini güncelle:

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

    } 

Referanslar: Swift Geliştirici referansları, Stackoverflow ait Sayfaları Lot Google'ın bazı forumları &.

Bu adımlar sorunlarımın & düzeltildiğini şimdi kendim imzalı URL'yi bir web görünümünde yükleyebilirim.

+2

4. adımda, neden hem "istek" hem de "requestObj" var? – kdazzle