WWDC之Introducing Safari View Controller

前言

眾多的App中,許多都有會(huì)涉及到點(diǎn)擊網(wǎng)站鏈接,網(wǎng)頁(yè)訪問(wèn)和交互網(wǎng)頁(yè)內(nèi)容的部分,而當(dāng)需要對(duì)這部分的網(wǎng)頁(yè)內(nèi)容進(jìn)行加載和訪問(wèn)時(shí),通常回自己用UIWebView以及iOS8推出的WKWebView的API實(shí)現(xiàn)一個(gè)網(wǎng)頁(yè)內(nèi)容的加載,或者讓用戶離開App使用系統(tǒng)的Safari進(jìn)行內(nèi)容加載,而現(xiàn)在iOS9又推出了SafariViewController,讓網(wǎng)頁(yè)內(nèi)容既能在當(dāng)前的App上進(jìn)行,同時(shí)擁有了許多Safari標(biāo)準(zhǔn)的特性進(jìn)行優(yōu)化,比如與Safari共享的緩存,與iOS端Safari一致的UI布局和操作,以及與Safari相同的安全性等等,這為開發(fā)者處理網(wǎng)頁(yè)內(nèi)容提出了一個(gè)更便捷快速的解決方案.

內(nèi)容

網(wǎng)頁(yè)內(nèi)容

App中加載所涉及網(wǎng)頁(yè)內(nèi)容,通常分為App本地的網(wǎng)頁(yè)內(nèi)容和網(wǎng)站的網(wǎng)頁(yè)內(nèi)容.

  • App本地的網(wǎng)頁(yè)資源
    有時(shí)我們會(huì)在本地沙盒中存放一些Web相關(guān)的HTML,CSS和Javascript文件,使得必要的時(shí)候主動(dòng)從本地去加載這些Web資源,而無(wú)論是加載方式上還是內(nèi)容展示界面上,都需要開發(fā)者自己使用UIWebView/WKWebView自己搭建一個(gè)簡(jiǎn)易的瀏覽器進(jìn)行數(shù)據(jù)加載,允許自定義UI,甚至修改網(wǎng)頁(yè)內(nèi)容.

  • 網(wǎng)站的網(wǎng)頁(yè)內(nèi)容
    如果不關(guān)心對(duì)網(wǎng)頁(yè)的展示方式,不需要對(duì)網(wǎng)站上網(wǎng)頁(yè)內(nèi)容的增加替換,只希望快捷優(yōu)雅地呈現(xiàn)網(wǎng)頁(yè)數(shù)據(jù)給用戶,使得用戶有良好的使用體驗(yàn),并且需要保證用戶的數(shù)據(jù)安全性,就可以使用Safari或者新推出的Safari ViewController來(lái)進(jìn)行網(wǎng)頁(yè)鏈接的處理,而Safari ViewController則可以在用戶不離開當(dāng)前App的情況完成數(shù)據(jù)的加載,并且獲得與Safari一樣的使用體驗(yàn).

Safari View Controller

Safari View Controller 特性
使用Safari View Controller進(jìn)行網(wǎng)頁(yè)鏈接的加載,會(huì)讓用戶獲得一些的功能:

  • 網(wǎng)站數(shù)據(jù)共享的Cookies,用戶可以方便地繼續(xù)瀏覽在Safari已經(jīng)登錄過(guò)的網(wǎng)站,所涉的信息都是一致的.
  • 共享使用iCloud Keychain,自動(dòng)完成針對(duì)必要信息如用戶名或密碼的輸入,并且如同Safari上一樣安全.
  • 提供Safari的閱讀器功能,讓網(wǎng)站內(nèi)容更加具有可讀性.
  • 網(wǎng)頁(yè)的分享功能上可以添加自定義的Acitivity.
  • 提供內(nèi)容屏蔽,允許對(duì)網(wǎng)頁(yè)上所不必要的內(nèi)容進(jìn)行過(guò)濾隱藏,讓網(wǎng)頁(yè)內(nèi)容更加可讀
  • 支持SSL安全協(xié)議,會(huì)主動(dòng)顯示安全或者不安全的網(wǎng)站信息

SFSafariViewController API
SFSafariViewController是Safari ViewController的核心API,它屬于SafariServices框架的成員,使用就必學(xué)先import SafariServices,其基類就是普通的UIViewController,而構(gòu)造方法如下:

init(URL: NSURL, entersReaderIfAvailable: Bool)
init(URL: NSURL)

其代理的協(xié)議SFSafariViewControllerDelegate也提供三個(gè)簡(jiǎn)單明了的方法:


    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十分簡(jiǎn)單易用,目的就是讓開發(fā)者能輕松地處理主流情況下的網(wǎng)頁(yè)加載.

Safari View Controller上的用戶授權(quán)
針對(duì)需要第三方服務(wù)的授權(quán),我們以前經(jīng)常在自己創(chuàng)建的UIWebView/WKWebView上完成,而現(xiàn)在可以利用Safari View Controller的所提供的特性, 更加安全,方便地進(jìn)行第三方服務(wù)的授權(quán)操作.而在使用上也是相當(dāng)簡(jiǎn)單,分為兩步驟:

  1. 在需要第三方服務(wù)網(wǎng)頁(yè)上進(jìn)行授權(quán)請(qǐng)求時(shí)使用SFSafariViewController進(jìn)行加載
  2. 會(huì)相響應(yīng)AppDelegate的方法
 application(application: UIApplication, handleOpenURL url: NSURL) -> Bool 

并且在這里完成授權(quán)結(jié)果的監(jiān)聽(tīng)和處理, 以及dismiss所使用的SFSafariViewController.

總結(jié)

響應(yīng)開發(fā)者對(duì)iOS平臺(tái)上網(wǎng)頁(yè)加載功能的需求,以及用戶網(wǎng)絡(luò)數(shù)據(jù)的安全性,在iOS9推出了Safari View Controller,簡(jiǎn)單易用的API和強(qiáng)大的特性,無(wú)疑是以后開發(fā)者加載網(wǎng)絡(luò)數(shù)據(jù)的首選,以后肯定也會(huì)增加更多的API,讓其更加強(qiáng)大和好用.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容