WWDC之Introducing Safari View Controller

前言

众多的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的所提供的特性, 更加安全,方便地进行第三方服务的授权操作.而在使用上也是相当简单,分为两步骤:

  1. 在需要第三方服务网页上进行授权请求时使用SFSafariViewController进行加载
  2. 会相响应AppDelegate的方法
 application(application: UIApplication, handleOpenURL url: NSURL) -> Bool 

并且在这里完成授权结果的监听和处理, 以及dismiss所使用的SFSafariViewController.

总结

响应开发者对iOS平台上网页加载功能的需求,以及用户网络数据的安全性,在iOS9推出了Safari View Controller,简单易用的API和强大的特性,无疑是以后开发者加载网络数据的首选,以后肯定也会增加更多的API,让其更加强大和好用.

你可能感兴趣的:(WWDC之Introducing Safari View Controller)