как залить куки в WKWebview iOS 12 - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть сайт с логином, я пытаюсь настроить WKWebView, и мне нужно сохранять и восстанавливать куки, чтобы поддерживать сеанс пользователя, но когда я добавляю сохраненные куки в мой wkwebview, пользователь должен снова войти в систему!

Я пытался внедрить файлы cookie в разные части моего кода, но ничего не сделал ...

override func viewDidLoad() {
    super.viewDidLoad()

    webView.uiDelegate = self
    webView.navigationDelegate = self


    self.webView.addObserver(self, forKeyPath: "URL", options: .new, context: nil)

    loadCookies()
    let myURL = URL(string:"http://staging.futurjob.it/dashboard")

    let myRequest = URLRequest(url: myURL!)

    webView.load(myRequest)

    imageHeaderContainer.alpha = 0
    btnBack.alpha = 0
    btnForward.alpha = 0

    imageHeaderContainer.frame.origin.y -= 100
    btnBack.frame.origin.y -= 56
    btnForward.frame.origin.y -= 56

    UIView.animate(withDuration: 0.6) {

        self.imageHeaderContainer.alpha = 1
        self.btnBack.alpha = 1
        self.btnForward.alpha = 1

        self.imageHeaderContainer.frame.origin.y += 100
        self.btnBack.frame.origin.y += 56
        self.btnForward.frame.origin.y += 56
    }

    btnForward.dropShadow()
    btnBack.dropShadow()
}

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    saveCookies()
}

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        saveCookies()
}


func saveCookies() {

    let cookieJar: HTTPCookieStorage = HTTPCookieStorage.shared
    if let cookies = cookieJar.cookies {
        let data: Data = NSKeyedArchiver.archivedData(withRootObject: cookies)
        let ud: UserDefaults = UserDefaults.standard
        ud.set(data, forKey: "cookie")
    }

    if #available(iOS 11.0, *) {
        webView.configuration.websiteDataStore.httpCookieStore.getAllCookies { cookies in
            for aCookie in cookies {
                HTTPCookieStorage.shared.setCookie(aCookie)
            }

            print(cookies)

        }
    }
}

func loadCookies() {
    let ud: UserDefaults = UserDefaults.standard
    let data: Data? = ud.object(forKey: "cookie") as? Data
    if let cookie = data {
        let datas: NSArray? = NSKeyedUnarchiver.unarchiveObject(with: cookie) as? NSArray
        if let cookies = datas {
            for c in cookies {
                if let cookieObject = c as? HTTPCookie {
                    HTTPCookieStorage.shared.setCookie(cookieObject)
                }
            }
        }
    }

    if #available(iOS 11.0, *) {
        let cookies = HTTPCookieStorage.shared.cookies ?? []
        for cookie in cookies {
            webView.configuration.websiteDataStore.httpCookieStore.setCookie(cookie)
        }
    }


}
}

Я ожидаю, что сеанс пользователя поддерживается.

1 Ответ

0 голосов
/ 24 декабря 2018

Проверьте это: https://forums.developer.apple.com/thread/99674, WkWebView имеет проблемы с файлами cookie, уже существующий WKWebview иногда игнорирует установленные файлы cookie.Обходной путь - сначала установить cookie, а затем создать WKWebView

.
...