Синхронизируйте куки в нескольких WKWebViews на iOS 9 - PullRequest
0 голосов
/ 09 ноября 2018

Я использую 2 ViewController с 2 WKWebViews.

Веб-представления используют общую конфигурацию WKWebViewConfiguration. расширение WKWebViewConfiguration {

static var Shared : WKWebViewConfiguration{
    if sharedConfiguration == nil{
        sharedConfiguration = WKWebViewConfiguration()
        sharedConfiguration.websiteDataStore = WKWebsiteDataStore.default()
        sharedConfiguration.processPool = WKProcessPool()
    }
    return sharedConfiguration
}

private static var sharedConfiguration : WKWebViewConfiguration!

}

Я передаю это каждому веб-представлению, и из того, что я прочитал, должно быть решение для общих файлов cookie.

Но поскольку я выполняю вход через веб-контент, я хочу иметь веб-представления SYNCHED , если пользователь вошел в систему или нет.

Проблема возникает, когда пользователь входит в систему . Следующие шаги:

1) Я идентифицирую хост и путь и проверяю navigationAction.request.url.host и navigationAction.request.url.path когда пользователь делает запрос, и запрос происходит ТОЛЬКО , если учетные данные верны (поэтому я знаю правильный хост и путь), я создаю bool var, который указывает, что пользователи вошли в систему

2) После того, как WebView didFinish: FINISH, я вызываю функцию, которая перезагружает веб-представления, которые должны получить обновленные , но веб-представления не работают так, как будто у них есть файлы cookie.

3) через несколько секунд (каждый раз по-разному), добавляя вручную код .reload (), веб-просмотры в каждом предварительном просмотре веб-просмотры синхронизируются.

Я работаю на iOS 9, так как это требования.

Похоже, что файлы cookie являются асинхронными, и, в конце концов, они приходят в общий processPool или websiteDataStore из моего понимания.

У кого-нибудь есть твердый раствор?

1 Ответ

0 голосов
/ 10 ноября 2018

Вам не нужно совместно использовать одну и ту же веб-конфигурацию, вам просто нужно поделиться processPool и KWebsiteDataStore.default() после создания каждой конфигурации веб-просмотра. Чтобы убедиться, что вы можете проверить куки из инструмента разработчика Safari.

Как упомянул @PS, для него не существует обходного пути синхронизации файлов cookie. Я также сталкиваюсь с той же проблемой. но я попытался несколько неожиданных вещей, чтобы решить эту проблему, и это работа 100%

Синхронизация файлов cookie занимает некоторое время для синхронизации с хранилищем файлов cookie для wkwebview. поэтому мое исправление состоит в том, что я просто сделал фиктивный веб-запрос, который будет синхронизировать cookie при запуске приложения и после этого, где бы вы ни использовали свой вход или входящий вызов, который вы можете использовать, не внося никаких дальнейших изменений.

...