Appにおけるウェブビューを実現するには、WKWebViewとSFSafariViewControllerのどちらを使うべきですか

App内で完全なウェブブラウジング体験を提供する場合や、リッチコンテンツを表示する、またはアプリケーションから移動することなく外部のウェブサイトを統合するなど、いずれの場合でも、適切なAPIを使用することで、スムーズかつシームレスなブラウジング体験を実現できます。

WKWebView APIとSFSafariViewController APIはいずれも、App内でウェブコンテンツを表示することができますが、あなたのAppのニーズに最適なのはどちらでしょうか。

「WKWebView」は、WebKitフレームワークに含まれています。WKWebViewを使用することで、ウェブコンテンツをAppのUIにシームレスに統合できます。既存のHTML、CSS、およびJavaScriptのコンテンツが機能するビューを読み込むことで、App内で直接ウェブコンテンツの全体または一部分を表示できます。また、ウェブ技術を使用した方がレイアウトやスタイルの要件をより適切に満たせる場合は、独自のビューを作成することもできます。


メモ:非推奨のUIWebView APIを使用してウェブコンテンツを表示している場合、セキュリティ、パフォーマンス、信頼性を向上させるために、可能な限り早くコードを更新するようにしてください。さらに詳しく

UIWebViewを使用するAppのアップデート期限の延長

...

View now

「SFSafariViewController」は、SafariServicesフレームワークの一部分です。この API を使用することで、ユーザーはApp内でウェブページまたはウェブサイトを閲覧することができます。また、パスワードの自動入力、リーダー、セキュアブラウジングなどの機能を含むSafariと同様のウェブブラウジング体験を、Appを終了させることなく提供できます。

これら2つのAPIは、アプリケーションのウェブテクノロジーを大幅に向上させることができますが、代替フレームワークを推奨する場合もあります。たとえば、アプリケーションにウェブベースのログイン画面を表示する場合では、ASWebAuthenticationSessionのほうが、最も安全なユーザーエクスペリエンスを提供することができます。

どんな場合にWKWebViewを使うべきですか。

ウェブコンテンツの表示をカスタマイズまたはコントロールしたり、そのコンテンツ自体を操作したりする場合、ニーズに合わせて柔軟な実装を最も適しているのはWKWebViewです(アプリケーションをオフラインで使用するよう設計している場合、すべてのWKWebViewのコンテンツに適切なフォールバックとアラートを設定してください)。

また、HTMLやCSSのコンテンツをインラインで表示したり、アプリケーションのユーザーインターフェイスの一部として使用したりする場合は、WKWebViewの使用を検討してください。

Washington Postの開発チームは、WKWebViewを使用して自社サイトのコンテンツをアプリケーション内で表示させました。

簡単に言えば、WKWebViewはとてもパワフルなテクノロジーであり、iOSやmacOSのフレームワークと連携して働きます。しかし、WKWebViewはシステムのテクノロジーやフレームワークを完全に置き換えるよう設計されたものではありません。たとえば、UITableView、UIImage、UIButtonなど、デバイスに最適化されたUIKitクラスの代わりにWKWebViewを使用するのは避けてください。使用した場合は、コアシステムの挙動が利用できなくなったり、ユーザーのエクスペリエンスが一定の基準に満たなくなったりしてしまいます。

どんな場合にSFSafariViewControllerを使うべきですか。

Safariに移動することなくApp内でウェブサイトを表示する場合、SFSafariViewControllerを使用するのがベストな方法です。このAPIを使用することで、Safariのインターフェイスをはじめとして、Safariの主要な機能とプライバシー保護をアプリケーション内に効果的に統合することができます。

SFSafariViewController を介して、Apple Developer App 上に Web リンクを表示します。

自身が所有していないウェブサイトのインタラクティブなコンテンツを表示したり、一般にアプリケーションの範囲外であるウェブコンテンツの一部を表示したりする必要がある場合、SFSafariViewControllerが最善の選択肢となります。


Resources

WKWebView

SFSafariViewController