2017-03-07 2 views
4

Ich entwickle eine App, die gemischte native View-Controller und UIWebView verwendet. App-Anmeldung wird von API gehandhabt, und ich habe eine Dienstprogrammfunktion, um das Authentifizierungs-Token in einem Cookie in HTTPCookieStorage sowie in einem persistenten Benutzermodell zu speichern.WKWebView Wie Sie Authentifizierungs-Cookies von HTTPCookieStorage hinzufügen

Jetzt möchte ich auf WKWebView aktualisieren, aber es lädt Cookies nicht automatisch von HTTPCookieStorage wie UIWebView.

fand ich einen Weg, um die Reaktion von Cookies von einer Antwort here und ich die Antwort ändern kann, speichern auch mein Benutzermodell die Auth-Token zu speichern, aber ich bin nicht sicher, wie ich die Cookies für eine neue Anforderung verwenden kann. Ich muss nur den Cookie zum ersten Laden hinzufügen, da ich die Navigation in der Webansicht deaktivieren werde.

Gibt es eine Möglichkeit, den Cookie-Wert der Kopfzeile oder eine andere Lösung hinzufügen?

Hier ist der Code, den ich verwenden werde, um den Cookie aus der Antwort zu erhalten.

func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) { 
if let urlResponse = navigationResponse.response as? HTTPURLResponse, 
    let url = urlResponse.url, 
    let allHeaderFields = urlResponse.allHeaderFields as? [String : String] { 
    let cookies = HTTPCookie.cookies(withResponseHeaderFields: allHeaderFields, for: url) 
    HTTPCookieStorage.shared.setCookies(cookies , for: urlResponse.url!, mainDocumentURL: nil) 
    decisionHandler(.allow) 
} 
} 

Antwort

-1
func webViewDidStartLoad(webView: UIWebView) 
{ 


    let currentURL: String = webView.stringByEvaluatingJavaScriptFromString("window.location.href")! 

    print("currentURL =\(currentURL)") 

    self.invalidUserNameMsg.hidden = true; 
    self.startActivityIndicatory() 

    if(!self.isLoginButtonClick) 
    { 
     let cookieStorage = NSHTTPCookieStorage.sharedHTTPCookieStorage() 
     var cookieStr:String = "" 
     let cookies = cookieStorage.cookies! 
     let strTemp = self.linstance_url.stringByReplacingOccurrencesOfString("https://", withString: "") 
     for cookie in cookies { 
      cookieStr = cookieStr + "=" + cookie.name + "=" + cookie.value 


      if(cookie.name == "sid" && (cookie.value.characters.count > 100) && cookie.domain == strTemp) 
      { 

       ApplicationContext.sharedInstance.accessToken = cookie.value 
       ApplicationContext.sharedInstance.instanceUrl = self.linstance_url 
       ApplicationContext.sharedInstance.orgNamespace = orgNamespaceStr 


       NSUserDefaults.standardUserDefaults().setObject(cookie.value, forKey: "accessToken") 
       NSUserDefaults.standardUserDefaults().setBool(true, forKey: "IsSSOLogin") 
       NSUserDefaults.standardUserDefaults().setObject(self.linstance_url, forKey: "linstance_url") 

       NSUserDefaults.standardUserDefaults().synchronize() 

       let appDelegate : AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate; 

       appDelegate.isSidValue = true 
       NSOperationQueue.mainQueue().addOperationWithBlock { 

        self.ssoWebView.hidden = true 
        self.ssoWebViewCloseButton.hidden = true 

       } 


       if(!self.isLoginButtonClick) 
       { 
        userNameTextField.text = "" 
        passwordTextField.resignFirstResponder(); 
        userNameTextField.resignFirstResponder(); 
        loginScrollView.contentSize = CGSizeMake(loginScrollView.frame.width, loginScrollView.frame.height - 100) 

        self.loginButtonAction(UIButton) 
        self.isLoginButtonClick = true 
       } 

      } 

     } 
    } 
} 

func webViewDidFinishLoad(webView: UIWebView) 
{ 


    self.stopActivityIndicator() 




} 
func webView(webView: UIWebView, didFailLoadWithError error: NSError?) 
{ 
    self.stopActivityIndicator() 
} 
+0

Dies ist nicht WKWebView. – markhorrocks

Verwandte Themen