У меня есть асинхронный вызов для обновления моих файлов cookie в новом wkwebview
.
public override func viewDidLoad() {
super.viewDidLoad()
let cookies = cookieService.getCookies(forDomain: urlService.getTopLevelDomain())
authenticationService.authenticateIfNeeded { [weak self] error in
if let error = error {
print(failed)
} else {
self?.identityService.storeCookies(cookies) {
DispatchQueue.main.async {
self?.loadRequest()
}
}
}
}
public func authenticateIfNeeded(completion: @escaping (Error?) -> Void) {
let domain = urlService.getTopLevelDomain()
identityService.refreshCookies(for: domain, force: true, completion: completion)
}
Я настроил свою сеть на предустановку 100% потери пакетов.
Логика, котораяимеет setcookies
в службах идентификации, имеет варианты повторных попыток, и для завершения повторных вызовов требуется всего 60 секунд.
func storeCookies(_ cookies: [AnyObject], completion: (() -> Void)? = nil) {
let group = DispatchGroup()
let httpCookies = cookies.compactMap { $0 as? HTTPCookie }
for httpCookie in httpCookies {
self.cookieStorageService.setCookie(httpCookie)
group.enter()
wkCookieStorage.setCookie(httpCookie) {
group.leave()
}
}
group.notify(queue: .main) {
completion?()
}
}
func refreshCookies(for domain: String, force: Bool, completion: @escaping VoidResultHandler) {
Retry<Void>.call(
shouldRetry: self.shouldRetryIdentityOperation,
handler: completion,
method: { completion in
self.identityOperations.refreshCookies(force: force, domain: domain, handler: { result in
switch result {
case .value(let cookies):
self.storeCookies(cookies) {
completion(.value(()))
}
case .error(let error):
completion(.error(error))
}
})
})
}
До тех пор, пока я не вижу пустой экран, а затем я получаю параметр повторной попытки. Как уменьшить эту задержку, чтобы улучшить взаимодействие с пользователем.