2017-03-07 3 views
4

私は混合ネイティブビューコントローラとUIWebViewを使用するアプリケーションを開発しています。アプリのサインインはAPIによって処理され、authトークンをHTTPCookieStorageのクッキーに保存するユーティリティー機能と永続的なユーザーモデルがあります。WKWebView HTTPCookieStorageからの認証Cookieを追加するには

WKWebViewに更新しますが、HTTPCookieStorageのように、UIWebViewのようなCookieは自動的には読み込まれません。

レスポンスクッキーを回答hereから保存する方法を見つけましたが、私のユーザーモデルに認証トークンを保存するように回答を変更できますが、新しいリクエストに対してクッキーをどのように使用できるかわかりません。 Webビューでのナビゲーションを無効にするため、Cookieを初期ロードに追加するだけで済みます。

ヘッダーまたは別のソリューションにCookieの値を追加する方法はありますか?

ここでは、レスポンスからクッキーを取得するために使用するコードを示します。

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) 
} 
} 

答えて

-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

これはWKWebViewではありません。 – markhorrocks

関連する問題