因爲蘋果的app都是在沙盒中,相互是不能訪問數據的。可是蘋果仍是給出了一個能夠在app之間跳轉的方法:URL Scheme。簡單的說,URL Scheme就是一個可讓app相互之間能夠跳轉的協議。每一個app的URL Scheme都是不同的,若是存在同樣的URL Scheme,那麼系統就會響應先安裝那個app的URL Scheme,由於後安裝的app的URL Scheme被覆蓋掉了,是不能被調用的。
ios
URL Schemes 的發展過程能夠說就是 iOS 效率工具類 App 的發展過程。瀏覽器
起初的蘋果創建的 Apple URL Schemes 只是用於自用,裏面只有郵件、電話、iTunes 搜索、Youtube 視頻等一些內置服務的 URL。app
我的認爲 URL Schemes 第一次大火是在 2011 年底(若有異議歡迎指正),那個時期也是越獄的鼎盛時期,那個時期越獄後你們都會裝的一個插件是 SBSettings[1]。越獄的人都知道每當新系統發佈的時候,等待新系統的越獄發佈是最撩人的,而這段時期那些「不越獄就能作到某種越獄功能」的應用常常一時間風頭無兩。ide
2011年 iOS 5 發佈帶來了通知中心,沒過多久,出現了一大批使用 iOS 系統設置的 URL Schemes 的 App 神奇地完成了接近 SBSettings 的功能——它們可讓咱們從通知中心直接跳轉到某些 App 的特定界面,好比 Twitter 的發推界面。它們甚至還能夠直接跳轉到系統設置裏的 Wi-Fi 選項。在這一批 App 中,就有現在效率軟件霸主之一 Launch Center Pro 的前身——Launch Center。工具
但很快,這一批 App 被蘋果火速下架,緣由是「對通知中心的誤用」。模糊的解釋讓開發者們摸不到頭腦,這種不滿一直延續到 Launcher 在 iOS 8 以後的下架事件。url
總之,在這一批 App 被下架以後,玩票的都離開了,只留下了一個 Launch Center。做者彷佛以爲 URL Schemes 大有可爲,因此在不觸碰紅線(當時的紅線是一不準動通知中心,二不準調用系統設置的界面)的基礎上繼續發力,在幾個月(2012年7月)以後推出了 Launch Center Pro v1.0。spa
另外一個注意到 iOS 上的 URL Schemes 的做用的是 Drafts 的做者 Greg Pierce。不一樣於 Launch Center Pro,Greg Pierce 打造的是一個以輸入文字爲主的效率應用,它以一個筆記本的面目示人,因此被媒體稱爲「Launch Center for text」。插件
二者大的區別在於先選動做仍是先輸入。Launch Center Pro 的使用方法是:先打開動做,若是須要輸入的話,你可讓它跳出來一個輸入框,你來輸入,輸入完成後跳轉到相應應用。Drafts 則是先在筆記本里把東西輸入了,而後再選擇動做,跳轉到相應應用。code
好像沒什麼大不了的嘛……嗎?這裏至少有兩個重要的區別:視頻
Drafts 中輸入過的內容會儲存在筆記本中以留做備份,而 Launch Center Pro 裏的則是動做運行完了就沒了。
Drafts 中輸入過的內容能夠經過 URL Schemes 進行屢次使用或一次性發給多個應用或服務,而 Launch Center Pro 只能將輸入內容發送到一個服務或應用。即除了剪切版外, Launch Center Pro 沒有其它變量的概念。
第三個區別不過重要:Launch Center Pro 裏的輸入框和 Drafts 的筆記本界面來比較很明顯不是一個好的寫做環境。
細節上的區別還有不少,二者適用的範圍隨着各自的發展擴大,所以重合的那部分功能也愈發的不起眼。Launch Center Pro 和 Drafts 從那之後成爲效率類應用中的雙雄,不斷提出更多更靈活使用 iOS 上 URL Schemes 的辦法。
好比 Launch Center Pro 提出了 List 的概念,將列表的想法融入到了 URL Schemes 中,列表的每一項能夠是簡單的字符,又能夠是一串新的複雜的 URL。使用列表可讓咱們每次的輸入變爲更輕鬆的選擇,對於那些重複的任務更爲高效。
而 Drafts 的做者直接不滿 URL Schemes 只能跳出不能跳回的問題,和 Marco Arment、Justin Williams 等人開發了 x-callback-URL 來作到跳出,並跳回這樣的動做。
能夠說這兩款 App 對 URL Schemes 的推廣和使用構思上的貢獻是最突出的,如今 URL Schemes 愈來愈被 iOS 用戶和開發者所重視,在我眼裏,一款 App 是否完整系統地支持 URL Schemes 已是判斷它是否優秀的標誌之一。
故事講到這裏,更重要的仍是如何使用 URL Schemes。
故事裏沒有提到 Pythonista、Editorial 跟 Workflow,毫不是我認爲這些 App 不夠腕兒,而是它們作的事情重點已經不在於 URL Schemes 了。
那麼MobLink網頁跳轉app指定界面有什麼做用呢?咱們所使用的每個app就至關於一個功能,app的跳轉可使得每一個app就像一個功能組件同樣,幫助咱們完成須要作的事情,好比三方支付,搜索,導航,分享等等。
一、首先在Info.plist中添加一行,選擇URL types,效果以下圖所示:
二、在展開的Item 0中填寫URL identifier,這個用來惟一標識用戶自定義的URL Scheme,推薦使用域名的反轉形式,如: shenzoom
三、在Item 0中添加新的一行,選擇URL Schemes
四、展開URL Schemes,在Item 0中輸入自定義的Scheme的名稱。在這裏只須要輸入自定義的Scheme的名稱便可,不須要加上://,例如這裏輸入的是fb149753595510548,那麼對應的自定義的URL就是fb149753595510548://,這裏能夠輸入多個。
五、最後一個完整的示例效果圖:
一、在Safari中使用
在Safari中直接在瀏覽器的地址欄中輸入shenzoom://,便可啓動剛纔的應用
二、在其餘的應用程序中使用
在須要調用的地方使用下面的代碼便可實現調用
NSString *customURL = @"shenzoom://"; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
三、參數的傳遞
NSString *customURL = @"shenzoom://?token=123abct®istered=1"; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
在AppDelegate中能夠實現下面的方法
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
上面的方法直接 返回YES 就能夠
解析
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { if ([sourceApplication isEqualToString:@"com.devzeng.demo.urlscheme"]) { NSLog(@"調用的應用程序的Bundle ID是: %@", sourceApplication); NSLog(@"URL scheme:%@", [url scheme]); NSLog(@"URL query: %@", [url query]); return YES; } else { return NO; } }
在你的動做執行完成了以後,有可能時須要返回到原有app的,這樣就須要你的app跳轉協議的url裏面應該能傳入調用者app的跳轉協議,這樣用戶跳轉到你的app完成動做後就能跳轉回去了
關於 iOS 中常見的白名單的說明能夠參考:常見白名單設置
蘋果的各項改進一點點蠶蝕了 URL Schemes 的領域,但目前宣告 URL Schemes 死刑還爲時尚早。
6s 以後的設備大概都會支持 3D Touch,它的特徵之一就是從 Homescreen 的 App 圖標上直接進入該 App 的具體某個功能了。這個功能也讓不少人興奮了一把,雖然說會用 URL Schemes 的人早就作到相似的事了。不過,既然官方已經有了這樣的功能,爲何還要用 URL Schemes?
一樣,在 iOS 9 中,咱們還能夠用 Siri 創建關於 App 的提醒事項,來作到之前只有用 Launch Center Pro 和 Due 這樣的 App 才能作到的定時打開 App。並且 iPhone 6s 還能夠作到不在充電狀態下使用 Hi, Siri 這樣咱們要創建一個提醒事項或者鬧鈴也無比簡單,只要說一聲「Hi, Siri. 半小時之後叫我。」就能定一個計時器。在這種比較之下 Due 這樣的 App 的做用顯然是被大大地削弱了。除此以外還有通知中心部件,Sharesheet 的出現都在必定程度上代替了 URL Schemes 的做用,削弱了其價值。 但按照目前的狀態,充其量只能說 URL Schemes 在衰敗,還遠不能宣判其死刑。
3D Touch 和 URL Schemes 重複的地方只有一部分複雜 URL Schemes 的功能:一些複雜 URL Schemes 的功能 3D Touch 沒有涵蓋,反過來 3D Touch 也有一些能夠作到的事經過複雜 URL Schemes 作不到。但在複雜 URL Schemes 之上的變形 URL Schemes 跟 x-callback-URL 都是 3D Touch 沒法作到的。
Siri 確實很是好用,我天天都用它不少次。因此我知道,若是不戴耳機,它是經過揚聲器跟你交流的,這種時候它聽錯了你說錯了,都得來回矯情半天,周圍有人的話場面會變得很尷尬。因此不少場合,經過 Due 的 URL Schemes,直接從 Dock 中的 Launch Center Pro 裏找到一個 Timer 或添加一個提醒其實更舒服。
我認可 URL Schemes 現在已無往日輝煌,但它在 iOS 上的效率方面的做用能不能被徹底替代,目前也未可知。