Edited at

iOS 9の新しいWebビュー: SFSafariViewController

More than 1 year has passed since last update.


【追記】SFSafariViewControllerが出た当初は本記事のようにほぼカスタマイズ性が無かったですが、元々のコンセプトはブレない範囲で少しずつカスタマイズ性が提供されています。

こちらなどご覧ください:

What's New in Safari View Controller - WWDC 2017 - Videos - Apple Developer


以下、iOS 9 SDK時点での SFSafariViewController についてです。

UIWebView・iOS 8で追加されたWKWebViewに加えて、iOS 9ではSFSafariViewController というものが追加されました。


手軽なAPIなので、今作っているPlayer!にもちょちょいと組み込めそうです( ´・‿・`)

※ 本記事は Apple による公開ドキュメントを元に構成しています


SFSafariViewControllerとは何か


  • アプリ内でWebビューを表示したい時に使える


    • UIWebView・WKWebViewと同様



  • 最大の特長は、 Safariとクッキーやその他データを共有できること


    • ログイン状態とか引き継がれてとても便利( ´・‿・`)



  • APIがかなりシンプル


    • 特定のURLを渡して表示する以外はほぼ何も出来ない

    • 使うの簡単



  • Safariとの大きな違いはタブ切り替えが無いことなど


どういう時に使えそう?


  • とりあえずシンプルにアプリ内でWebビューを出したい時


    • ナビゲーションボタン・シェアボタン・リロードボタンなどが標準で付く

    • UIWebView・WKWebViewはナビゲーション対応とかするとちょっと面倒



  • ユーザーがSafariアプリへ移っちゃうのをなるべく防ぎたい時


    • Safariと同等でデータも共有されるので、Safariアプリへ飛びたくなる動機はほぼ無さそう

    • iOS 9向けには、Safariで開くの遷移先をこちらにしちゃっても良いかも( ´・‿・`)

    • ただ、iOS 9ではSafariへの遷移が、PUSH遷移ぽくかつ左上にbackボタンも表示されるのでSafariへ遷移して離脱はこれまでより気にしなくて良いかも



  • カスタムUIを組みたい時などには使えない?


    • フルスクリーン表示じゃ無くてContainer Viewとか使えば、Safariとのデータ共有と、カスタムUIの良いとこ取りも出来るかも?




フルスクリーン表示じゃ無くてContainer Viewとか使えば、Safariとのデータ共有と、カスタムUIの良いとこ取りも出来るかも?


viewDidLoadではめ込みたい部分にaddSubviewだけしてみたら真っ白でサイトが表示されずでしたが、少し細工するといけました( ´・‿・`)

addChildViewController(webVC)

webVC.didMoveToParentViewController(self)
webContainerView.addSubview(webView)

Simulator Screen Shot May 18, 2016, 11.55.01 AM.png

(下部のシェア部分がカスタムビュー)


参考資料