前言
眾多的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,讓其更加強大和好用.