iOS9で追加された「SFSafariViewController」を利用することでSafariのCookieの情報を共有できる(orできない)という情報がちらほらググると出てくるので、実際のところどうなのか検証してみました。

参考
SFSafariViewController はトラッキングの夢を見るか
[iOS 9] SFSafariViewControllerお試し

知りたいこと

SFSafariWebViewとSafariがWebブラウザの設定に準じてCookieが同期できるかどうか。そのために以下の2つを行いました。

  • 1stパーティCookieの読み書き(Safari->App or App->Safari)ができるかどうか
  • 3rdパーティCookieの読み書き(Safari->App or App->Safari)ができるかどうか

結論

Webブラウザの設定に準じてCookieの共有はされた!
(たまに共有されない時もあった。どんなパターンの時に共有されないのか引き続き調査中…きっとバグ!)

前提条件

検証環境

  • Swift 2.2
  • Xcode 7.3
  • Safari 601.1

訪問先ドメイン

1stパーティCookie検証時

  • 訪問先ドメイン: example.com
  • CookieDomain: exapmle.com

example.comに適当なhtmlファイルを置いて試しました。

3rdパーティCookie検証時

  • 訪問先ドメイン: s3-ap-northeast-1.amazonaws.com
  • CookieDomain: exapmle.com

AWSのS3を利用してs3-ap-northeast-1.amazonaws.comからiframeに読みこんで試しました。

Cookieのブロック設定

  • example.comのCookieがない状態&常に許可
  • example.comのCookieがない状態&訪問したWebサイトを許可
  • example.comのCookieがない状態&アクセス中のWebサイトのみ許可
  • example.comのCookieがある状態&アクセス中のWebサイトのみ許可

Cookieの付与方法

  • JavaScript(document.cookieを操作)
  • PHP(setcookieを操作)

その他

  • 確認はiPhoneとMacを繋いでSafariのWebインスペクタでexample.comにアクセスして確認
  • 検証の際は毎回iPhoneの履歴とWebサイトデータを消去してから
  • 今回はJavaScriptの結果をお伝えします。(PHPも同じでした)
  • ソースコードは最後に載せております

イメージはこんな感じ。ボタンを押したらSFSafariViewControllerに遷移します。

1stパーティCookie結果

どのCookieのPolicyの場合でも以下の結果になりました。

  • Safari->App 共有される
  • App->Safari 共有される

ただし、Safari->Appに関しては共有されない時もありました。
共有されない時はランダムに起きたので(おそらく)、どんなパターンの時に共有されないのか調査中です…。

3rdパーティCookie結果

各パターンで以下のような結果になりました。

example.comのCookieがない状態&常に許可

  • Safari->App 共有される
  • App->Safari 共有される

example.comのCookieがない状態&訪問したWebサイトを許可

  • Safari->App 共有されない
  • App->Safari 共有されない

example.comのCookieがない状態&アクセス中のWebサイトのみ許可

  • Safari->App 共有されない
  • App->Safari 共有されない

example.comのCookieがある状態&アクセス中のWebサイトのみ許可

  • Safari->App 共有されない
  • App->Safari 共有されない

(追加)example.comのCookieがない状態&訪問したWebサイトを許可(過去にアクセスあり)

  • Safari->App 共有されない
  • App->Safari 共有されない

(追加)example.comのCookieがある状態&訪問したWebサイトを許可(過去にアクセスあり)

  • Safari->App 共有される
  • App->Safari 共有される

Cookieのブロック設定を常に許可にしている時Cookieがある状態で訪問したWebサイトを許可の場合はCookieが更新されました!
ただ、Safari->Appの時は1stパーティCookie検証時と同じように共有がされる時とされない時がありました。(調査中…)

SFSafariViewControolerの使い方

SafariServicesをimport

SFSafariViewControllerDelegateを追加

インスタンスを作って遷移

Delegateメソッド

一言

基本的にはWebブラウザの設定に応じてCookieの共有がされているっぽいです。
たまに、共有されない時があるのはおそらくバグだと思われます…。

引き続き何かわかったら追記します!

あわせて読みたい記事