
WKWebViewのCookieがどうやっても設定できなくなって困った話
こんにちはキッチンカーアーティストのジャマです。
最近SwiftとNuxt + Vue + TypeScriptの連携話ばかりで恐縮です。
今日もまたそんな連携話になります。
アプリの流れはチュートリアル画面→ユーザ登録画面→トップ画面となっています。
チュートリアル画面→ユーザ登録画面はVueで作成してWKWebViewで表示します。トップ画面はネイティブで、お知らせ画面というのがまたWKWebViewの画面になります。
今回大変困ったのが、最初のWKWebViewでユーザ登録完了時にSessionをCookieに登録して、お知らせ画面のWKWebViewでは登録したCookieを使ってアクセスをします。
ブラウザでは最初のWKWebViewとお知らせのWKWebViewをタブを変えて表示してもCookieが引き継がれて上手くアクセスできます。
さらにブラウザを落として再度お知らせ画面を表示しても上手くアクセスできます。
そしてiPhoneシミュレータを使って最初のWKWebViewからお知らせのWKWebViewを表示すると上手くアクセスできます。
がしかし!!
iPhoneシミュレータを再ビルドで立ち上げ直すと、Cookieがクリアされてお知らせ画面が上手く表示できなくなりました。
どうもCookieが消えてします。
CookieをiPhone端末のキーチェーンに入れたり、半日ぐらい無駄な努力をし続けました。笑
iOS側の問題かと思いきやVue側のCookieの作り方のせいでした。。。
答えはこの方の記事に記載されていました。
要約すると
Cookieに有効期限を入れないとWKWebViewでは永続化されない
ということでした。
あと、私の環境ではWKWebViewをurlごとにインスタンス化するという特殊な作りのため、Cookieのパスを/にする必要がありました。
this.$cookies.set(this.$Token_key, クッキーに記録するデータ,{
maxAge: 60 * 60 * 24 * 365 * 10,
path : "/"
});
Vue側のクッキーを記録する部分をこんな感じにしました。
cookieの記録はcookie-universal-nuxtというライブラリを使っています。
cookie-universal-nuxtの有効期限とpathの設定は上記になります。
これでなんとかSwiftとVue周りの連携ができてきました。