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

Paw*_*uch 10 cookies webkit ios swift wkwebview

我需要在WKWebView实例之间共享cookie - 为此我使用单个WKWebViewConfiguration实例,然后用于初始化每个WKWebView.

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

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

let configuration = WKWebViewConfiguration()
configuration.websiteDataStore = websiteDataStore
configuration.processPool = WKProcessPool()   /* !!! */
Run Code Online (Sandbox Code Playgroud)

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

let cookieStore = self.webConfiguration.websiteDataStore.httpCookieStore
     cookieStore.setCookie(cookie, completionHandler: {
})
Run Code Online (Sandbox Code Playgroud)

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

iOS:11.2.6

Paw*_*uch 5

经过进一步测试,我设法找到了解决方案 - 尽管我不确定发生了什么。简而言之 -在 WKWebView 实例化后,上面的完成处理程序会触发 OK。

就我而言,我需要在登录后设置一些 cookie(因此 ATM 不显示 webviews)。因此,调用 setCookie 只会将这些操作排在某处——当 Web 客户端被触发时,它们会被刷新。如果有人可以链接文档 - 那太好了!


更新

因此,由于这个问题仍然存在 - 我终于回到了这一点。我现在的解决方案是:

  1. 在钥匙串中缓存 cookie 值(每次应用程序调用 HTTPCookieStore.setCookie - 这可能完成或不完成(这是问题所在)

  2. 当 HTTPCookieStore.setCookie{} 完成块触发时(确认确实设置了 cookie),然后我从钥匙串中删除该值,webview 现在负责 cookie 值的生命周期)

  3. 每次启动应用程序时,我都会检查 cookie 值是否缓存在钥匙串中 -> 如果是 HTTPCookieStore.setCookie()

以上可以无限循环直到 webview 实际打开。