WKWebView と SFSafariViewController の見分け方

iOS アプリに搭載されているアプリ内ブラウザが WebView なのか SafariViewController なのかは、実は見た目で判別することができます。 iOS エンジニアでない方にはあまり馴染みがないようなので、まとめました。

WKWebView とは

ウェブコンテンツを表示するための view です。アプリ内にウェブコンテンツを埋め込むことができ、全画面表示である必要はありません。 ( アプリ内に HTML 広告を表示するケースなどでも使われていますね。 )

表示内容の制御など、ウェブコンテンツにアプリが関与したいときは、こちらを使います。

SFSafariViewController とは

Safari の機能 ( リーダー表示、オートフィル、コンテンツブロックなど ) を持つ view controller です。基本的に全画面で表示します。

クッキーやウェブサイトのデータは Safari と共有されます。 SFSafariViewController 上でのユーザ操作などはアプリからは見えず、オートフィルや閲覧履歴などのデータを取得することはできません。 SFSafariViewController は最早アプリではなく、 Safari の一部と言ってよいでしょう。

ウェブサイトを表示するだけでよければ、こちらを使います。

見分け方

SFSafariViewController の UI には以下の特徴があります。

  • 読み取り専用のアドレスバー、鍵マーク、リーダー表示モード
  • アクションボタン
  • 完了ボタン、履歴を進む・戻る、 Safari で開く
f:id:takasfz:20170529184616p:plain

また、 Safari をプライベートブラウズモードに変更すると、 SFSafariViewController も黒ベースの配色に変わります。 追記: iOS 11 以降 SFSafariViewController はプライベートブラウズモード非対応となったようです。 → iOS 11 の SFSafariViewController は Cookie が共有されない - takasfz blog

f:id:takasfz:20170529184606p:plain

これらの特徴をすべて備えていれば、それは SFSafariViewController です。

まとめ

判断に迷ったら、 Safari をプライベートブラウズモードに変更してみて配色が変わるかを確認するのが一番手軽で確実です。 iOS11 以降、配色を見て判断することができなくなったので、アドレスバー / タブバーの UI で判断しましょう..


出典: