swift:SafariWebViewControllerを使ってみました

概要

iOS 9: Getting Started With SFSafariViewController - Envato Tuts+ Code Tutorialを参考に、SafariViewControllerを使ってみました。SafariViewControllerは、iOS9で導入されたUIコントロールです。WebViewより簡単にアプリの中に、しかもSafariの全機能を持つWeb閲覧機能を組み込むことができるようになります。

WebView機能

アプリにWeb閲覧機能を組み込む方法です。

  1. Safariアプリと連携する方法
  2. WebViewを使う方法
  3. SafariViewControllerを使う方法

SafariViewControllerを使うサンプルアプリを作成しました。ボタンをタップするとGoogle検索画面をオープンします。

f:id:unokun3:20160117180633p:plain

Safariアプリ連携

関連づけられたアプリ(Safari)でURLをオープンします。

ボタン押下イベントに以下の処理を追加するだけです。

    @IBAction func openInSafari(sender: UIButton) {
        let url = NSURL(string: self.urlString)!
        UIApplication.sharedApplication().openURL(url)
    }

アプリの切り替えが行われるため、SafariアプリでどのURLにアクセスしているかをアプリでは知ることができません。

f:id:unokun3:20160117180642p:plain

WebViewを使う方法

どのURLにアクセスしたかをアプリで知ることはできますが、Safariでの履歴や機能が使えるわけではありません。また、画面遷移するための処理が必要になります。

SafariViewControllerを使う方法

SafariViewControllerを使うためには、ボタン押下時に、SafariViewControllerを開きます。Safariのイベントは、SFSafariViewControllerDelegateのメソッドで取得します。

class ViewController: UIViewController, SFSafariViewControllerDelegate {
    private var urlString:String = "https://google.com"

    // 最初に設定したURLがロードされた時に呼ばれる
    func safariViewController(controller: SFSafariViewController,
        didCompleteInitialLoad didLoadSuccessfully: Bool) {
            print("safariViewController")
            
    }
    
    // ユーザーが「完了(Done)」をタップした時に呼ばれる
    func safariViewControllerDidFinish(controller: SFSafariViewController)
    {
        print("safariViewControllerDidFinish")
        controller.dismissViewControllerAnimated(true, completion: nil)
    }
}

SafariViewControllerを使うと、Safariの全機能が使えます。さらに、SFSafariViewControllerDelegateを実装することによって Safariでの操作履歴も取得することができます。

f:id:unokun3:20160117180650p:plain

関連資料