我应该在 App 内使用 WKWebView 还是 SFSafariViewController 来提供网络浏览体验?

无论你的 App 是需要提供完整的网络浏览体验,显示各式丰富的内容,或者让用户不必离开 App 就能浏览外部网站,你都可以选择合适的 API 以提供流畅无缝的体验。

你可以使用 WKWebView 和 SFSafariViewController 这两个 API 在你的 App 内显示网络内容。但哪一个最适合你的 App 的需要呢?

WKWebView 是 WebKit 框架的一部分:你可以用它在你的 App 内嵌入网络内容,使之成为 App UI 的一部分。你可以通过读取利用已有的 HTML,CSS 和 JavaScript 内容的视图,来直接在 App 内呈现完整或部分网络内容的视图;如果使用网络技术能够更好地满足你的布局与格式要求,你也可以创建你自己的视图。


注意:如果你的 App 使用已被弃用的 UIWebView API 来显示网络内容,你需要尽快更新代码以提升安全性、性能与稳定性。了解更多:

App 更新需弃用 UIWebView 的最后限期已推迟

Apple 在 2014 年设计了 WKWebView,让您无论是在 iOS 还是在 macOS 上,都能快速且安全地将网页内容集成到您的 app 中。此后,我们一直建议您从 UIWebView 和 WebView (两者均已正式弃用) 转而使用 WKWebView。同时,App Store...

View now

SFSafariViewController 是 SafariServices 框架的一部分,它能让你的用户直接在你的 App 内浏览网页或网站,并享受与使用 Safari 时相同的网络浏览体验——包括“自动填充密码”、“阅读器”和“安全浏览”等功能。这两个 API 都可以为你的 App 内的网络技术提供许多重量级帮助,但在一些情况下,我们会推荐替代框架。例如,当你的 App 需要呈现一个基于网络的登录页面时,使用 ASWebAuthenticationSession 能够为用户提供最安全的体验。

我应该在什么时候使用 WKWebView?

如果你需要自定义或者控制网络内容的显示——或者与内容本身互动——WKWebView 会在帮助你构建符合需求的执行程序方面发挥最大的灵活性。(如果你的 App 需要离线使用,记得确保所有 WKWebView 内容有合适的回退与警告。)

此外,如果你需要显示 HTML 或 CSS 内容,或将其作为你的 App 用户界面的一部分,也可以考虑使用 WKWebView。

华盛顿邮报》开发团队使用 WKWebView 在他们的 App 内显示《华盛顿邮报》网站内容。

简而言之,WKWebView 是一项可以与 iOS 和 macOS 框架配合使用的强大技术。尽管如此,WKWebView 并不适用于完全取代系统技术与框架。例如,你应该避免用它替代针对设备优化的 UIKit 类,比如 UITableView,UIImage 和 UIButton,因为这会导致你在核心系统行为上受到损失,以及提供欠佳的用户体验。

我应该在什么时候使用 SFSafariViewController?

当你希望在你的 App 内直接显示网站,使用户不必切换到 Safari 时,最理想的工具就是SFSafariViewController。使用这个 API 可以让你在 App 内有效地嵌入 Safari 界面,以及它的诸多关键功能和隐私保护措施。

《开发者》App 通过 SFSafariViewController 来显示网站链接。

当你需要显示不属于你的网站的互动网络体验,或者显示超出你的 App 范围之外的部分网络内容时,SFSafariViewController 能够发挥最大的效用。


WKWebView

SFSafariViewController