MobLink網頁跳轉app指定界面技術簡介之 URL Scheme

項目演示


URL Scheme是什么

由于蘋果的app都是在沙盒中,相互是不能訪問數據的。但是蘋果還是給出了一個可以在app之間跳轉的方法:URL Scheme。簡單的說,URL Scheme就是一個可以讓app相互之間可以跳轉的協議。每個app的URL Scheme都是不一樣的,如果存在一樣的URL Scheme,那么系統就會響應先安裝那個app的URL Scheme,因為后安裝的app的URL Scheme被覆蓋掉了,是不能被調用的。

URL Schemes 的發展

URL Schemes 的發展過程可以說就是 iOS 效率工具類 App 的發展過程。

起初的蘋果建立的 Apple URL Schemes 只是用于自用,里面只有郵件、電話、iTunes 搜索、Youtube 視頻等一些內置服務的 URL。

個人認為 URL Schemes 第一次大火是在 2011 年末(如有異議歡迎指正),那個時期也是越獄的鼎盛時期,那個時期越獄后大家都會裝的一個插件是 SBSettings[1]。越獄的人都知道每當新系統發布的時候,等待新系統的越獄發布是最撩人的,而這段時期那些「不越獄就能做到某種越獄功能」的應用經常一時間風頭無兩。

2011年 iOS 5 發布帶來了通知中心,沒過多久,出現了一大批使用 iOS 系統設置的 URL Schemes 的 App 神奇地完成了接近 SBSettings 的功能——它們可以讓我們從通知中心直接跳轉到某些 App 的特定界面,比如 Twitter 的發推界面。它們甚至還可以直接跳轉到系統設置里的 Wi-Fi 選項。在這一批 App 中,就有如今效率軟件霸主之一 Launch Center Pro 的前身——Launch Center。

但很快,這一批 App 被蘋果火速下架,原因是「對通知中心的誤用」。模糊的解釋讓開發者們摸不到頭腦,這種不滿一直延續到 Launcher 在 iOS 8 之后的下架事件。

總之,在這一批 App 被下架之后,玩票的都離開了,只留下了一個 Launch Center。作者似乎覺得 URL Schemes 大有可為,所以在不觸碰紅線(當時的紅線是一不許動通知中心,二不許調用系統設置的界面)的基礎上繼續發力,在幾個月(2012年7月)之后推出了 Launch Center Pro v1.0。

另一個注意到 iOS 上的 URL Schemes 的作用的是 Drafts 的作者 Greg Pierce。不同于 Launch Center Pro,Greg Pierce 打造的是一個以輸入文字為主的效率應用,它以一個筆記本的面目示人,所以被媒體稱為「Launch Center for text」。

兩者大的區別在于先選動作還是先輸入。Launch Center Pro 的使用方法是:先打開動作,如果需要輸入的話,你可以讓它跳出來一個輸入框,你來輸入,輸入完成后跳轉到相應應用。Drafts 則是先在筆記本里把東西輸入了,然后再選擇動作,跳轉到相應應用。

好像沒什么大不了的嘛……嗎?這里至少有兩個重要的區別:

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 了。

URL Scheme有什么作用

那么MobLink網頁跳轉app指定界面有什么作用呢?我們所使用的每一個app就相當于一個功能,app的跳轉可以使得每個app就像一個功能組件一樣,幫助我們完成需要做的事情,比如三方支付,搜索,導航,分享等等。

創建URL Scheme

1、首先在Info.plist中添加一行,選擇URL types,效果如下圖所示:

2、在展開的Item 0中填寫URL identifier,這個用來唯一標識用戶自定義的URL Scheme,推薦使用域名的反轉形式,如: shenzoom

3、在Item 0中添加新的一行,選擇URL Schemes

4、展開URL Schemes,在Item 0中輸入自定義的Scheme的名稱。在這里只需要輸入自定義的Scheme的名稱即可,不需要加上://,例如這里輸入的是fb149753595510548,那么對應的自定義的URL就是fb149753595510548://,這里可以輸入多個。

5、最后一個完整的示例效果圖:

使用URL Scheme

1、在Safari中使用

在Safari中直接在瀏覽器的地址欄中輸入shenzoom://,即可啟動剛才的應用

2、在其他的應用程序中使用

在需要調用的地方使用下面的代碼即可實現調用

NSString *customURL = @"shenzoom://";

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];

3、參數的傳遞

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 的領域,但目前宣告 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 上的效率方面的作用能不能被完全替代,目前也未可知。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容