SONICMOOV Googleページ

SFSafariViewControllerのCookieの同期について検証してみた

SFSafariViewControllerのCookieの同期について検証してみた

  • このエントリーをはてなブックマークに追加

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

import SafariServices

SFSafariViewControllerDelegateを追加

class ViewController: UIViewController, SFSafariViewControllerDelegate {
...

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

 let url = NSURL(string: "example.com")!
 let sfSafariViewController = SFSafariViewController(URL: url, entersReaderIfAvailable: true)
 sfSafariViewController.delegate = self
 presentViewController(sfSafariViewController, animated: false, completion: nil)

Delegateメソッド

    func safariViewController(controller: SFSafariViewController, activityItemsForURL URL: NSURL, title: String?) -> [UIActivity] {
        print("アクションボタン押されたよ")
        
        return []
    }
    
    func safariViewControllerDidFinish(controller: SFSafariViewController) {
        print("完了が押されたよ")
    }
    
    func safariViewController(controller: SFSafariViewController, didCompleteInitialLoad didLoadSuccessfully: Bool) {
        print("ロード完了したよ(最初のページのロード完了時のみ呼ばれるよ)")
    }

一言

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

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

  • このエントリーをはてなブックマークに追加

記事作成者の紹介

komu(フロントエンドエンジニア)

フロントエンジニアのコムです。 良い感じのアイコンが来てウキウキです。

関連するSONICMOOVのサービス

フロントエンドエンジニア募集中!

×

SNSでも情報配信中!ぜひご登録ください。

×

SNSでも
情報配信中!
SONICMOOV Facebookページ SONICMOOV Twitter SONICMOOV Googleページ
フロントエンドエンジニア募集中!

新着の記事

mautic is open source marketing automation