一.簡(jiǎn)介蘋果的沙盒機(jī)制
一般來(lái)說(shuō),我們使用的智能設(shè)備上有許多我們的個(gè)人信息。比如:聯(lián)系方式、銀行卡/信用卡信息、支付寶/Paypal/各大商城的賬戶密碼、照片甚至行程與位置信息等等。
如果說(shuō),你設(shè)備上的每一個(gè)應(yīng)用,不管是官方的還是你從任何商城安裝的應(yīng)用都可以隨意地獲取這些信息,那么你輕則收到騷擾信息和郵件、重則后果不堪設(shè)想。如何讓這些信息不被其它應(yīng)用隨意使用,或者說(shuō),如何讓這些信息僅在設(shè)備所有者本人知情并允許的情況下被使用,是所有智能設(shè)備與操作系統(tǒng)所要在乎的核心安全問(wèn)題。
在 iOS 這個(gè)操作系統(tǒng)中,針對(duì)這個(gè)問(wèn)題,蘋果使用了名為「沙盒」的機(jī)制:應(yīng)用只能訪問(wèn)它聲明可能訪問(wèn)的資源。一切提交到 App Store 的應(yīng)用都必須遵守這個(gè)機(jī)制。
蘋果選擇沙盒來(lái)保障用戶的隱私和安全,但沙盒也阻礙了應(yīng)用間合理的信息共享,于是有了 URL Schemes 這個(gè)解決辦法。
二.簡(jiǎn)介URL Scheme
1.URL Scheme是什么?
通過(guò)對(duì)比網(wǎng)頁(yè)鏈接來(lái)理解 iOS 上的 URL Scheme,應(yīng)該就容易多了。
URL Scheme 有兩個(gè)單詞:
URL,我們都很清楚,例如http://www.apple.com就是個(gè) URL,我們也叫它鏈接或網(wǎng)址;
Scheme,表示的是一個(gè) URL 中的一個(gè)位置——最初始的位置,即 ://之前的那段字符。比如http://www.apple.com這個(gè)網(wǎng)址的 Scheme 是 http。
根據(jù)我們上面對(duì) URL Scheme 的使用,我們可以很輕易地理解,在以本地應(yīng)用為主的 iOS 上,我們可以像定位一個(gè)網(wǎng)頁(yè)一樣,用一種特殊的 URL 來(lái)定位一個(gè)應(yīng)用甚至應(yīng)用里某個(gè)具體的功能。而定位這個(gè)應(yīng)用的,就應(yīng)該這個(gè)應(yīng)用的 URL 的 Scheme 部分,也就是開頭那部分。比如短信,就是 sms:
2.如何配置URL Scheme?
項(xiàng)目中需要配置 URL Scheme 以用于場(chǎng)景恢復(fù)時(shí)跳轉(zhuǎn)到應(yīng)用中(這里的scheme要唯一確定,不要與其他應(yīng)用一致,建議使用項(xiàng)目名稱作為scheme,不然有可能會(huì)跳轉(zhuǎn)到其他的應(yīng)用里)。
在iOS工程中選擇工程 Target,選擇 Info 選項(xiàng),然后打開 URL Types,添加 URL Scheme。可以自定義協(xié)議名稱,如moblink。這個(gè)形式的 URI 就會(huì)關(guān)聯(lián)跳轉(zhuǎn)到工程中。
三.簡(jiǎn)介Universal Link
1.Universal Link 是什么?
Universal Link 是 Apple 在WWDC 2015上為 iOS 9 引入的一個(gè)新功能,是通過(guò)傳統(tǒng)HTTP鏈接來(lái)啟動(dòng)App的新技術(shù)??梢允褂孟嗤木W(wǎng)址打開網(wǎng)站和App。
通過(guò)唯一的網(wǎng)址,就可以鏈接到App中具體的視圖,不需要特殊的Scheme。如果用戶沒(méi)有安裝App則鏈接到對(duì)應(yīng)的普通網(wǎng)頁(yè)。
2.如何配置 Universal Link ?
在蘋果開發(fā)者網(wǎng)站中打開需要使用 Universal Link 功能的App中的Associated Domains開關(guān)
然后上傳一個(gè)名為“apple-app-site-association”的文件到服務(wù)器根目錄下,該文件內(nèi)容格式如下:

其中“appID”是由開發(fā)者的TeamID和App的BundleID拼接而成,“paths”數(shù)組可用來(lái)指定該URL下的哪些路徑被注冊(cè)成為Universal Link。相關(guān)詳細(xì)說(shuō)明請(qǐng)參考:Support Universal Links
最后在AppDelegate中實(shí)現(xiàn)相應(yīng)的代理方法即可。
四.URL Scheme和Universal Link區(qū)別
在 iOS 9 以前,我們從外部啟動(dòng)App都是通過(guò)URL Scheme實(shí)現(xiàn)跳轉(zhuǎn)的。這種方式雖然可自定義程度很高,能夠巧妙地實(shí)現(xiàn)很多跳轉(zhuǎn),但弊端也很明顯:我們只能通過(guò) scheme://example 這種格式的鏈接來(lái)實(shí)現(xiàn)跳轉(zhuǎn),而且現(xiàn)在蘋果還對(duì)這種方式的跳轉(zhuǎn)加了一個(gè)提示框:“是否打開XXX”。對(duì)于對(duì)Web和原生App交互的場(chǎng)景需求量很大的產(chǎn)品來(lái)說(shuō),這樣的跳轉(zhuǎn)方式顯然是步驟冗雜的,用戶體驗(yàn)并不好。
iOS 9 以后,Universal Link 的出現(xiàn)完美的解決了這個(gè)問(wèn)題。它所提供的直接、順暢、無(wú)縫銜接的跳轉(zhuǎn)能夠讓用戶體驗(yàn)提升一個(gè)很大的級(jí)別。用戶可以點(diǎn)擊開發(fā)者指定的類似于https://example.com/t的URL直接喚醒App,而不需要在瀏覽器打開再點(diǎn)擊其他按鈕,實(shí)現(xiàn)真正意義上的一鍵直達(dá),無(wú)縫鏈接。