アプリをUIWebView
からWKWebView
に移行していますが、ユーザーが認証された情報を含むCookieをNSHTTPCookieStorage
に保存することで処理される自動ログイン機能があります。ただし、WKWebView
はこの場所でCookieを検索していないようであるため、ユーザーは毎回ログイン画面を表示されます。
WKWebViewにCookieを適切に使用させるためにアクティブ化する必要があるものはありますか?
NSHTTPCookieStorageからすべてのCookieを読み取り、WKHTTPCookieStore(iOS 11で導入)を使用してこれらのCookieをWKWebviewに設定できます。 WKWebviewの詳細: https://developer.Apple.com/videos/play/wwdc2017/220/
以前のバージョンをサポートしたい場合は、この回答を参照してください。 WKWebViewで使用するCookieを設定できますか?
// 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
ネイティブコード(NSURLConnection/NSURlsessionを使用)で取得したCookieをUIWebviewに共有するには、CookieをNSHTTPCookieStorageに永続化し、UIwebviewはすべてのネットワーク要求にこれらのCookieを使用しました。ただし、この手法はWKwebviewでは機能しません。
ただし、次のように、ネイティブコードからWKWebviewにCookieを共有できます。
NSURLRequestの読み込み中に、URLRequestのヘッダーとしてCookieを読み込み、WKwebviewを使用してリクエストを読み込むことができます。
また、後続のすべてのAJAX WKWebviewからの呼び出しでもこのCookieを使用する場合は、URLRequestの読み込み中にこれらのCookieをWKWebviewに挿入することをお勧めします。これについては以下の回答で詳しく説明します。 。 WKWebViewで使用するCookieを設定できますか?