2017/8/18追記
iOS11では、SFSafariViewControllerとSafariのcookieの共有ができなくなりました。
SFSafariViewControllerとSafariがcookieを共有しているかの調査
SFSafariViewControllerはiPhoneのSafariとのcookieを共有しているかどうか調査してみました。
SafariでセットしたcookieをSFSafariViewControllerで取得できるか
SafariでTwitterでログイン。
その後SFSafariViewControllerを見るとどうなってるかを調べました。
SFSafariViewControllerの表示は下のように実装しました。
import UIKit import SafariServices class ViewController: UIViewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) let c = SFSafariViewController(url: URL(string: "https://twitter.com")!) present(c, animated: true, completion: nil) } }
下が、その状態でSFSafariViewControllerでTwitterを見た時の表示です。
無事にログイン状態になっている(cookieが共有されている)ことが確認できました。
SFSafariViewControllerでセットしたcookieをSafariで取得できるか
今度はSFSafariViewControllerでログインしてSafariに移動してみます。
一度ログアウトして、SFSafariViewController上でTwitterにログインします。
この状態でSafariでTwitterを見てもログイン状態になっていました。
SFSafariViewController → Safariへもcookieは引き継がれるようです。
WKWebViewではcookieを引き継ぐか
最後にSafariとWKWebViewではcookieの共有されるか確認してみました。
実装は下の通りです。
import UIKit import WebKit class ViewController: UIViewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) let v = WKWebView(frame: view.bounds) view.addSubview(v) v.load(URLRequest(url: URL(string: "https://twitter.com")!)) } }
SFSafariViewController同様にSafariでログイン → WKWebViewで表示としたのですがログイン状態にはなっていませんでした。(cookieは引き継がれず)
まとめ
Safari ⇔ SFSafariViewControllerではcookieが共有される。
Safari ⇔ WKWebViewではcookieが共有されない。