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

URL Scheme是什麼

  因爲蘋果的app都是在沙盒中,相互是不能訪問數據的。可是蘋果仍是給出了一個能夠在app之間跳轉的方法:URL Scheme。簡單的說,URL Scheme就是一個可讓app相互之間能夠跳轉的協議。每一個app的URL Scheme都是不同的,若是存在同樣的URL Scheme,那麼系統就會響應先安裝那個app的URL Scheme,由於後安裝的app的URL Scheme被覆蓋掉了,是不能被調用的。
  ios

URL Schemes 的發展

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

URL Scheme有什麼做用

  那麼MobLink網頁跳轉app指定界面有什麼做用呢?咱們所使用的每個app就至關於一個功能,app的跳轉可使得每一個app就像一個功能組件同樣,幫助咱們完成須要作的事情,好比三方支付,搜索,導航,分享等等。

建立URL Scheme

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

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

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

四、展開URL Schemes,在Item 0中輸入自定義的Scheme的名稱。在這裏只須要輸入自定義的Scheme的名稱便可,不須要加上://,例如這裏輸入的是fb149753595510548,那麼對應的自定義的URL就是fb149753595510548://,這裏能夠輸入多個。
五、最後一個完整的示例效果圖:

使用URL Scheme

一、在Safari中使用
在Safari中直接在瀏覽器的地址欄中輸入shenzoom://,便可啓動剛纔的應用

二、在其餘的應用程序中使用
在須要調用的地方使用下面的代碼便可實現調用

NSString *customURL = @"shenzoom://";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];

三、參數的傳遞

NSString *customURL = @"shenzoom://?token=123abct&registered=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 上的效率方面的做用能不能被徹底替代,目前也未可知。

相關文章
相關標籤/搜索