前言
众多的App中,许多都有会涉及到点击网站链接,网页访问和交互网页内容的部分,而当需要对这部分的网页内容进行加载和访问时,通常回自己用UIWebView
以及iOS8推出的WKWebView
的API实现一个网页内容的加载,或者让用户离开App使用系统的Safari进行内容加载,而现在iOS9又推出了SafariViewController
,让网页内容既能在当前的App上进行,同时拥有了许多Safari标准的特性进行优化,比如与Safari共享的缓存,与iOS端Safari一致的UI布局和操作,以及与Safari相同的安全性等等,这为开发者处理网页内容提出了一个更便捷快速的解决方案.
内容
网页内容
App中加载所涉及网页内容,通常分为App本地的网页内容和网站的网页内容.
App本地的网页资源
有时我们会在本地沙盒中存放一些Web相关的HTML,CSS和Javascript文件,使得必要的时候主动从本地去加载这些Web资源,而无论是加载方式上还是内容展示界面上,都需要开发者自己使用UIWebView/WKWebView
自己搭建一个简易的浏览器进行数据加载,允许自定义UI,甚至修改网页内容.网站的网页内容
如果不关心对网页的展示方式,不需要对网站上网页内容的增加替换,只希望快捷优雅地呈现网页数据给用户,使得用户有良好的使用体验,并且需要保证用户的数据安全性,就可以使用Safari或者新推出的Safari ViewController
来进行网页链接的处理,而Safari ViewController
则可以在用户不离开当前App的情况完成数据的加载,并且获得与Safari一样的使用体验.
Safari View Controller
Safari View Controller 特性
使用Safari View Controller
进行网页链接的加载,会让用户获得一些的功能:
- 网站数据共享的Cookies,用户可以方便地继续浏览在Safari已经登录过的网站,所涉的信息都是一致的.
- 共享使用
iCloud Keychain
,自动完成针对必要信息如用户名或密码的输入,并且如同Safari上一样安全. - 提供Safari的阅读器功能,让网站内容更加具有可读性.
- 网页的分享功能上可以添加自定义的Acitivity.
- 提供内容屏蔽,允许对网页上所不必要的内容进行过滤隐藏,让网页内容更加可读
- 支持SSL安全协议,会主动显示安全或者不安全的网站信息
SFSafariViewController API
SFSafariViewController
是Safari ViewController的核心API,它属于SafariServices
框架的成员,使用就必学先import SafariServices
,其基类就是普通的UIViewController
,而构造方法如下:
init(URL: NSURL, entersReaderIfAvailable: Bool)
init(URL: NSURL)
其代理的协议SFSafariViewControllerDelegate
也提供三个简单明了的方法:
optional public func safariViewController(controller: SFSafariViewController, activityItemsForURL URL: NSURL, title: String?) -> [UIActivity]
optional public func safariViewControllerDidFinish(controller: SFSafariViewController)
optional public func safariViewController(controller: SFSafariViewController, didCompleteInitialLoad didLoadSuccessfully: Bool)
由此看出Safari View Controller
涉及的API十分简单易用,目的就是让开发者能轻松地处理主流情况下的网页加载.
Safari View Controller上的用户授权
针对需要第三方服务的授权,我们以前经常在自己创建的UIWebView/WKWebView
上完成,而现在可以利用Safari View Controller
的所提供的特性, 更加安全,方便地进行第三方服务的授权操作.而在使用上也是相当简单,分为两步骤:
- 在需要第三方服务网页上进行授权请求时使用
SFSafariViewController
进行加载 - 会相响应
AppDelegate
的方法
application(application: UIApplication, handleOpenURL url: NSURL) -> Bool
并且在这里完成授权结果的监听和处理, 以及dismiss
所使用的SFSafariViewController
.
总结
响应开发者对iOS平台上网页加载功能的需求,以及用户网络数据的安全性,在iOS9推出了Safari View Controller
,简单易用的API和强大的特性,无疑是以后开发者加载网络数据的首选,以后肯定也会增加更多的API,让其更加强大和好用.