iOS URL Scheme 理論

理論篇

什么是URL Scheme战授?

簡單的說,由于蘋果選擇沙盒來保障用戶的隱私和安全桨嫁,App只能訪問自己的沙盒植兰,但同時(shí)也阻礙了應(yīng)用間合理的信息共享。所以蘋果提供了一個(gè)可以在App之間跳轉(zhuǎn)的方法:URL Scheme璃吧。如果你的App需要提供一個(gè)供別的App訪問的功能或者數(shù)據(jù)楣导,那么你必須在你的App定義一個(gè)相對應(yīng)的URL Scheme。當(dāng)別的App使用一個(gè)URL Scheme進(jìn)行訪問時(shí)畜挨,系統(tǒng)會(huì)根據(jù)URL Scheme進(jìn)行匹配筒繁,執(zhí)行相應(yīng)的操作噩凹。

如何理解URL Scheme?

為了更加深入的理解上面的那段話毡咏,首先我們清楚幾個(gè)概念:

1.URL(Uniform Resoure Locator:統(tǒng)一資源定位器):也就是我們熟悉的那個(gè)“網(wǎng)址”驮宴,通過他我們可以訪問到我們想要的服務(wù)和資源,并且URL可以傳遞相應(yīng)的參數(shù)呕缭;

2.URL地址格式排列為:scheme://host:port/path堵泽,舉個(gè)??,http://www.sohu.com/domain/HXWZ就是一個(gè)典型的URL恢总,而這個(gè)網(wǎng)址對應(yīng)的Scheme就是http迎罗,表示的是一個(gè) URL 中的一個(gè)位置——最初始的位置。也可以理解為一種自定義的協(xié)議片仿。

3.根據(jù)我們上面對 URL Scheme 的理解纹安,我們可以很輕易地理解,在以本地應(yīng)用為主的 iOS 上滋戳,我們可以像定位一個(gè)網(wǎng)頁一樣钻蔑,用一種特殊的 URL 來定位一個(gè)應(yīng)用甚至應(yīng)用里某個(gè)具體的功能。而定位這個(gè)應(yīng)用的標(biāo)識(shí)奸鸯,也就是Scheme。比如微信的Scheme是weixin,打開微信掃一掃功能的URL Scheme則是weixin://dl/scan可帽。

這樣一對比就容易很明白的理解出了URL Scheme的真正含義娄涩,它是為了在iOS系統(tǒng)中定位對應(yīng)的App然后執(zhí)行對應(yīng)的操作,復(fù)雜的URL Scheme還可以傳遞參數(shù)映跟。

URL Scheme的應(yīng)用場景蓄拣?

1.使用iOS系統(tǒng)預(yù)設(shè)的URL Scheme調(diào)用系統(tǒng)App:
iOS系統(tǒng)內(nèi)置的App,如mail努隙,電話等等球恤,都有相應(yīng)的URL Scheme供其他的App調(diào)用.比如下面的代碼就是使用系統(tǒng)的電話App給18888888888打電話。
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://18888888888"]];
關(guān)于其他系統(tǒng)支持的URL Scheme我在此不再贅述荸镊。以下是一些Scheme合集:

常用 iOS URL Scheme附錄

你所知道好玩有趣的 iOS URL schemes 有哪些

2.使用URL Scheme讓別的應(yīng)用打開自己的App,自己的App寫好一些需要?jiǎng)e的App來使用的功能咽斧。比如對于支付寶來說,當(dāng)?shù)腁pp使用支付寶支付功能時(shí)躬存,那么這些App就可以使用支付寶定義好的Scheme來訪問支付寶的支付功能张惹。

3.使用第三方App寫好的URL Scheme實(shí)現(xiàn)一些快捷功能。比如說我是一個(gè)工具類App岭洲,如果我知道很多App的Scheme宛逗,可以直接調(diào)用他們的很多功能,實(shí)現(xiàn)功能聚合的目的盾剩。事實(shí)上來說雷激,Launch Center Pro 就是基于Scheme來實(shí)現(xiàn)快捷方式的替蔬。

4.跨App間的一些交互
這個(gè)其實(shí)與第二條類似,但是分開說是因?yàn)?假如你們公司有2個(gè)以上的App或者你自己開發(fā)的多款A(yù)pp屎暇,要進(jìn)行進(jìn)程間的數(shù)據(jù)共享或者其他操作承桥,完全可以使用URL Scheme進(jìn)行一些具有想象力的操作。

5.進(jìn)行App間的跳轉(zhuǎn)恭垦。在傳統(tǒng)意義上的頁面跳轉(zhuǎn)快毛,無非也就是以下幾種方式:

Storyboard的segues方式跳轉(zhuǎn)

直接跳轉(zhuǎn)present,dismiss跳轉(zhuǎn)

UINavigationController的push番挺,pop跳轉(zhuǎn)

這些方式其實(shí)都有一個(gè)缺點(diǎn)唠帝,那就是跳轉(zhuǎn)很不靈活,如果想讓一個(gè)模塊根據(jù)需求動(dòng)態(tài)的跳轉(zhuǎn)不同頁面玄柏,傳遞不同的參數(shù)襟衰,那么就必須書寫很多復(fù)雜的邏輯幾句一些情況也選擇要跳轉(zhuǎn)的邏輯。

或許你說我可以通過控制器的名字來創(chuàng)建對應(yīng)的控制器進(jìn)行動(dòng)態(tài)的跳轉(zhuǎn)粪摘,但事實(shí)上這樣的方式如果僅僅進(jìn)行跳轉(zhuǎn)還是能滿足需求的瀑晒,但是在傳遞參數(shù)方面就是閑的力不從心。

所以說了那么多徘意,有一種跳轉(zhuǎn)方式可以既滿足跳轉(zhuǎn)的動(dòng)態(tài)需求苔悦,也可以靈活的傳遞參數(shù)。這種方式就是使用URL Scheme進(jìn)行動(dòng)態(tài)跳轉(zhuǎn)椎咧。這也是我非常推薦的一種使用方式玖详。并且在一些組件化開發(fā)的嘗試中,這種跳轉(zhuǎn)方式也帶來了很多便利勤讽。

使用URL Scheme跳轉(zhuǎn)的好處

1.這種跳轉(zhuǎn)方式是很靈活的蟋座,我本地只需要需要進(jìn)行簡單邏輯處理,使用openURL來打開對應(yīng)的控制器脚牍,而這個(gè)你想要打開的URL Scheme是可以動(dòng)態(tài)的從服務(wù)器動(dòng)態(tài)獲取的向臀。那么這樣就很簡單的實(shí)現(xiàn)了動(dòng)態(tài)跳轉(zhuǎn)。

2.URL Scheme傳遞參數(shù)的方式也與URL一致诸狭,只需要簡單的在URL里附加上對應(yīng)的參數(shù)即可券膀。

3.這種頁面跳轉(zhuǎn)是無差別的,通過URL Scheme跳轉(zhuǎn)可以無縫的在H5頁面和原生頁面之間跳轉(zhuǎn)傳值作谚,而無非做更多的邏輯判斷三娩。

使用URL Scheme跳轉(zhuǎn)的缺點(diǎn)

1.寫在info.plist文件中的Scheme可能會(huì)被一些反編譯手段獲取到。

2.URL Scheme可能會(huì)被劫持調(diào)來安全隱患妹懒,比如支付寶的URL Scheme劫持漏洞

當(dāng)然這是避免的,以下引自烏云:

蘋果可以限制 iOS 應(yīng)用不能注冊別的應(yīng)用的 Bundle ID 作為 URL Scheme雀监。這樣的話,使用自己的 Bundle ID 作為 URL Scheme 的接收器就會(huì)變的安全很多。

第三方應(yīng)用可以通過

①給自己發(fā)送 URL Scheme 請求來證明沒有被劫持会前,如果沒有收到自己的 URL Scheme好乐,就可以及時(shí)給用戶發(fā)送提醒;

②利用 MobileCoreServices 服務(wù)中的 applicationsAvailableForHandlingURLScheme() 來查看所有注冊了該 URL Schemes 的應(yīng)用和處理順序瓦宜,從而檢測自己蔚万、或者別人的 URL Scheme 是否被劫持。

作者:Job_Yang
鏈接:http://www.reibang.com/p/d3185c70cc44
來源:簡書
著作權(quán)歸作者所有临庇。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)反璃,非商業(yè)轉(zhuǎn)載請注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末假夺,一起剝皮案震驚了整個(gè)濱河市淮蜈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌已卷,老刑警劉巖梧田,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異侧蘸,居然都是意外死亡裁眯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門讳癌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來穿稳,“玉大人,你說我怎么就攤上這事晌坤∷静荩” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵泡仗,是天一觀的道長。 經(jīng)常有香客問我猜憎,道長娩怎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任胰柑,我火速辦了婚禮截亦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘柬讨。我一直安慰自己崩瓤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布踩官。 她就那樣靜靜地躺著却桶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上颖系,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天嗅剖,我揣著相機(jī)與錄音,去河邊找鬼嘁扼。 笑死信粮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的趁啸。 我是一名探鬼主播强缘,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼不傅!你這毒婦竟也來了旅掂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蛤签,失蹤者是張志新(化名)和其女友劉穎辞友,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體震肮,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡称龙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了戳晌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鲫尊。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖沦偎,靈堂內(nèi)的尸體忽然破棺而出疫向,到底是詐尸還是另有隱情,我是刑警寧澤豪嚎,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布搔驼,位于F島的核電站,受9級特大地震影響侈询,放射性物質(zhì)發(fā)生泄漏舌涨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一扔字、第九天 我趴在偏房一處隱蔽的房頂上張望囊嘉。 院中可真熱鬧,春花似錦革为、人聲如沸扭粱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽琢蛤。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間虐块,已是汗流浹背俩滥。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贺奠,地道東北人霜旧。 一個(gè)月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像儡率,于是被迫代替她去往敵國和親挂据。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容