Как наблюдать за веб-просмотром, чтобы получить куки-файлы определенной страницы в iOS swift? - PullRequest
0 голосов
/ 24 мая 2018

У меня есть Webview из WKWebview, где я загружаю URL.Загруженный сайт имеет страницу входа и домашнюю страницу.После входа пользователь перенаправляется на домашнюю страницу.При входе в систему пользователю отправляется файл cookie.Я хочу получить этот файл cookie, и в этот момент мне нужно сделать HTTP-вызов.Поскольку я новичок в iOS, я получил некоторую информацию о том, как получить все куки одновременно и по конкретному URL.Но «для конкретного URL» я не получаю cookie в нужный момент и не знаю, как его получить.

Итак, я хочу знать, как наблюдать, как пользователь вошел в систему иЯ получил cookie после входа в систему.

Я попробовал какой-нибудь код:

Код наблюдателя в viewDidLoad

NotificationCenter.default.addObserver(self, selector: #selector(cookiesConfigured(notification:)), name: .cooKieName, object: nil)

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

Наблюдательmethod

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

    print("fact "+keyPath!)

    if keyPath == "URL" {
        let clickedUrl = webView.url?.absoluteString as String!
        print("fact " + clickedUrl! )

        if clickedUrl == tokenURL {
            print("fact equal" )

            webView.removeObserver(self, forKeyPath: "URL")
            webView.addObserver(self, forKeyPath:#keyPath(WKWebView.estimatedProgress), options: .new, context: nil)


        }

    }else  if keyPath == #keyPath(WKWebView.estimatedProgress) {

        print("fact estimated progress")

        if webView.estimatedProgress == 1.0 {
            print("fact estimated progress 100")
             NotificationCenter.default.post(name: .cooKieName, object: nil)
        }

    }

  //  guard object as? WKWebView === webView, keyPath == #keyPath(WKWebView.estimatedProgress) else { return }

  //  print(Float(webView.estimatedProgress))


}

Обработчик уведомлений и метод получения cookie

@objc func cookiesConfigured(notification: Notification){

    print("fact cookieconfigured")

    if let cookies = HTTPCookieStorage.shared.cookies(for: URL(string: tokenURL)!) {

         print("fact inLet")

        for cookie in cookies {

            print("fact inLet")

            print("fact \(cookie)")
            print("fact version \(cookie.version)")
            print("fact name \(cookie.name)")
            print("fact value \(cookie.value)")
            print("fact expiredate \(String(describing: cookie.expiresDate))")
            print("fact sessiononly \(cookie.isSessionOnly)")
            print("fact domain \(cookie.domain)")
            print("fact path \(cookie.path)")
            print("fact issecure \(cookie.isSecure)")
        }
    }
...