ios – 未调用WKHTTPCookieStore.setCookie完成处理程序

前端之家收集整理的这篇文章主要介绍了ios – 未调用WKHTTPCookieStore.setCookie完成处理程序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要在WKWebView实例之间共享cookie – 为此我使用单个WKWebViewConfiguration实例,然后用于初始化每个WKWebView.

为了做到这一点,我假设我必须使用共享的WKProcessPool,例如:

let websiteDataStore = WKWebsiteDataStore.default()
websiteDataStore.httpCookieStore.add(self)

let configuration = WKWebViewConfiguration()
configuration.websiteDataStore = websiteDataStore
configuration.processPool = WKProcessPool()   /* !!! */

但是这样做会导致setCookie完成处理程序无法触发.

let cookieStore = self.webConfiguration.websiteDataStore.httpCookieStore
     cookieStore.setCookie(cookie,completionHandler: {
})

如果我没有设置WKProcessPool(*)实例 – 那么完成块会很好,但显然WebViews看不到cookie; /有没有人遇到过这个?关于如何共享cookie的想法?

iOS:11.2.6

解决方法

经过进一步测试后,我找到了解决方案 – 虽然我不确定发生了什么.简而言之 – 在实例化WKWebView之后,上面的完成处理程序会激活.

在我的情况下,我需要在登录后设置一些cookie(因此没有显示ATM的webview).因此,调用setCookie只会将这些操作排在某处 – 当Web客户端被触发时它们会被刷新.如果有人可以链接文档 – 这太棒了!

UPDATE

所以这个问题仍然存在 – 我终于回到了这个问题.我现在的解决方案是:

>在keychain中缓存cookie值(每次app调用HTTPCookieStore.setCookie时 – 可能完成与否(这是问题)
>当HTTPCookieStore.setCookie {}完成块触发(确认cookie确实已设置)时,我从keychain中删除值,webview现在负责cookie值的生命周期)
>在app的每次启动时,我都会检查cookie值是否缓存在keychain中 – >如果是这样HTTPCookieStore.setCookie()

以上可以无限循环UNTIL webview实际上是打开的.

猜你在找的iOS相关文章