2015-01-19 5 views
10

Я перехожу к приложению от UIWebView до WKWebView, и есть функция автоматического входа, которая была обработана путем сохранения файла cookie с информацией о том, что пользователь был аутентифицирован в NSHTTPCookieStorage. Однако WKWebView, похоже, не смотрит это местоположение для файла cookie, и поэтому пользователю каждый раз предлагается экран входа в систему.Место хранения файлов cookie WKWebView

Есть ли что-то, что мне нужно активировать, чтобы WKWebView правильно использовал файлы cookie?

+0

Вы нашли ответ в другом месте? – Pablo

+0

По состоянию на 3/4 я до сих пор не нашел решения. – JMD

ответ

5

На данный момент WKWebView и UIWebView не взаимодействуют должным образом вместе из-за того, что не используют одно и то же пространство для хранения файлов cookie. Это подробно обсуждается в следующем ответе. How can I retrieve a file using WKWebView?

Остается надеяться, что Apple исправит это в обновленном обновлении.

+0

Я пробовал это, но это не сработало. Я предположил из-за того, что я читал в другом месте, что WKWebView не придерживается протоколов NSURLRequest. упомянутый здесь http://stackoverflow.com/a/24982211/798456 – JMD

-2
let webConfiguration = WKWebViewConfiguration() 
webConfiguration.processPool = webProcessPool! 

Init каждый WKWebView с WKWebViewConfiguration, может быть сюрпризом для вас!

let webview = WKWebView(frame:rect, configuration:webConfiguration) 
1

Совместное использование куки, полученные в нативном коде (с использованием NSURLConnection/NSURlsession) в UIWebView было сделано сохраняющиеся куки NSHTTPCookieStorage и UIWebView использовали эти куки для всех сетевых запросов. Однако метод WKwebview не работает.

Мы можем, однако делиться куки с машинным кодом в WKWebview следующим образом:

При загрузке NSURLRequest, мы можем загрузить печенье в качестве заголовка в URLRequest, а затем загрузить запрос с WKwebview.

и если вы хотите, чтобы все последующие вызовы AJAX из WKWebview также использовали этот файл cookie, вы можете захотеть вставить эти файлы cookie в WKWebview при загрузке URLRequest. Это подробно объясняется в следующем ответе. Can I set the cookies to be used by a WKWebView?

1

Вы можете прочитать все печенье из NSHTTPCookieStorage и установить эти куки в WKWebview с помощью WKHTTPCookieStore (введен в ИО 11). Подробнее о WKWebview: https://developer.apple.com/videos/play/wwdc2017/220/

Если вы хотите поддерживать более ранние версии, обратитесь к этому ответу. Can I set the cookies to be used by a WKWebView?

// get the cookie store (WKHTTPCookieStore) from the webview 
let cookieStore =webview.configuration.websiteDataStore.httpCookieStore 
//create a cookie 
let cookie = HTTPCookie(properties: [ HTTPCookiePropertyKey.domain: "canineschool.org", HTTPCookiePropertyKey.path: "/",HTTPCookiePropertyKey.secure: true,HTTPCookiePropertyKey.name: "ssoToken", HTTPCookiePropertyKey.value: "******"]) 

// set the cookie to cookieStore 
cookieStore.setCookie(cookie!){ 
    //load the request. 
} 

Важно: SetCookie является запрос асинхронной. Обработчик завершения будет вызывается, как только cookie установлен. https://developer.apple.com/documentation/webkit/wkhttpcookiestore/2882007-setcookie

+0

Удалось ли вам это сделать правильно? Любой пример? – Lubbo

+0

Я реализовал в своем приложении. Я обновил ответ с помощью фрагмента кода. –

+0

Были ли у вас какие-либо проблемы, когда запросы ajax со страницы, где вы установили файлы cookie таким образом, не содержат файлы cookie, которые вы установили? Я использую loadHTMLString для загрузки страницы после завершения обработчика завершения setCookie, и у меня все еще нет правильных файлов cookie в запросе ajax. Использование js для установки 'document.cookie' и добавление WKUSerScript для запуска' atDocumentStart' действительно работает для меня. Я бы предпочел обновленный API. – atreat

Смежные вопросы