[iOS 9] SFSafariViewControllerお試し


WebViewとSafariのCookie共有問題

解決方法として、ios9ならSFSafariViewController で実現できるらしい。
実際に組み込んで動作検証してみました。

準備

1.Xcode7をインストール
2.プロジェクトを作成し、Deployment Targetを9に設定

webview組み込み

3.storyboardでViewControllerにButtonを配置
4.ViewController.swiftに、SFSafariViewControllerが開くように実装

ViewController.swift
import UIKit
import SafariServices // ★追加

// ★SFSafariViewControllerDelegate追加
class ViewController: UIViewController, SFSafariViewControllerDelegate {

    // ★Button押した場合のメソッド
    @IBAction func openBtn(sender: AnyObject) {
        // ★開くURL
        let _url:NSURL = NSURL(string: "https://www.google.co.jp/")!
        // ★待ちに待った作成
        let _brow = SFSafariViewController(URL: _url, entersReaderIfAvailable: true)
        _brow.delegate = self
        // ★ほぼSafariを開く
        presentViewController(_brow, animated: true, completion: nil)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // ★SFSafariViewControllerを閉じた際の処理
    func safariViewControllerDidFinish(controller: SFSafariViewController) {
        print("close")
    }
}

5.ボタンのタップイベントとのひもづけ
storyboard開いて、ButtonのTouch Downの+をViewControllerへピーッと

定義したメソッドがでてくるので、選択

6.Githubに置きました
SFSafariViewControllerお試し

実行結果

今回はGoogleのページを開き、ログイン状態を比較することで、共有状態を検証
- Safari未ログイン状態。アプリ起動し、ほぼSafariのWebViewを起動。
---> Google未ログイン状態で表示
- Safariログイン状態。アプリ起動し、WebView表示。
---> Googleログイン状態で表示
- Safari未ログイン状態。WebViewで、ログイン。Safari開く。
---> Googleログイン状態で表示
- Safariログイン状態。WebViewで、ログアウト。Safari開く。
---> Google未ログイン状態で表示
Safari未ログイン状態。WebViewで、未ログイン。Safariでログイン。WebView見る
---> Googleページのどこかのリンクを押せば、Googleログイン状態に切り替わる

ちょっと、最後は意地悪な検証をしましたが、共有できていることがわかりました。
他の完全にCookie使っているサイトで試したいですね。
いまどき、Web Storageに保持してますかね。

P.S.

ios初心者なので、Qiitaに投稿しながら、腕を上げます。
見やすいマークダウンとか。。。

以上