iOS開發:內建URL schemes
在IOS的應用中經常會看到一些應用程式通過某個點擊動作而直接跳到App Store頁面,開始很奇怪這種第三方應用於IOS的系統應用互動時怎麼實現的。後來發現蘋果的開發人員文檔中關於這種通訊的實現是預設支援的,只要第三方 的應用符合規範即可,這裡的規範就是指接下來我們要簡單介紹的東西——URL Schemes。
根據規定,IOS中支援幾種特殊的URL schemes,第三方的本地應用程式和運行在Safari的Web應用程式,通過這些URL schemes可以與IOS的系統應用進行整合,為的是為使用者提供一種無縫的使用者體驗過程。某些手機IOS應用中都會展示一些電話號碼資訊,在使用者點擊這 些號碼時,通過使用規定內合適的URL,應用程式可以開啟手機的Phone Application進行撥號呼叫操作。這是一種很快捷的方式,省去了使用者要記憶號碼,然後再逐次撥號的流程。
1.URL scheme開啟檔案
根據第三方應用程式的類型,開啟IOS系統應用的方式劃分為兩種
(1) Native App或我們常稱呼的本地應用,可以通過UIApplication的openURL:方法來系統應用
(2)Web App或我們常稱呼的Web應用,指的是那些運行在Safari瀏覽器中或通過UIWebView 內嵌入本地應用的的Web應用程式,可以通過點擊或長按操作開啟系統應用。
當然,順利開啟系統應用的前提是二者都要保證提供指定的附和規範的URL scheme。
2.URL Scheme分類
IOS支援的URL Schemes分為以下幾類
(1)Mail Links(郵件連結)
通過mailto協議來載入Mail應用程式,只要提供目標郵箱地址即可,代碼如下
HTML頁面中
- <a href="mailto:frank@wwdcdemo.example.com">John Frank</a>
本地應用中
- if(![[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"mailto:frank@wwdcdemo.example.com"]] ){
- UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"" message:@"無法開啟程式" delegate:nil cancelButtonTitle:@"確認" otherButtonTitles: nil] ;
- [alert show] ;
- }
另外也可以通過to,cc,bcc,subject,body欄位來指定郵件的抄送,密送,主題,訊息內容。參數值都要經過URL編碼處理。
- mailto:foo@example.com?cc=bar@example.com&subject=Greetings%20from%20Cupertino!&body=Wish%20you%20were%20here!
(2)Phone links(電話連結)
tel協議用來啟動Phone 應用,以及呼叫指定的號碼。在網頁上點擊一個號碼連結會彈出一個對話方塊來提示使用者是否需要撥號,並在使用者允許後開始撥號。在本地的應用中,開啟 一個tel協議地址會直接撥號而對使用者提示。如下 HTMl頁面中
- <a href="tel:1-408-555-5555">1-408-555-5555</a>
本地應用中
- if(![[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"tel:1-408-555-5555"]] ){
- UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"" message:@"無法開啟程式" delegate:nil cancelButtonTitle:@"確認" otherButtonTitles: nil] ;
- [alert show] ;
- }
為了防止惡意的號碼重新導向或改變通話行為以及帳號,Phone應用支援tel協議的大部分的特殊字元。當URL包含*或#時,Phone應用是不會 進行撥號的。如果你的應用程式是tonguo使用者輸入或其他未知源擷取的,那麼URL中的任何特殊字元都需要經過編碼。對於本地應用,可以使用 NSString的stringByAddingPercentEscapesUsingEncoding:方法來編碼。 此外,IOS中的safari預設是執行號碼檢測的。然而,如果你得頁麵包含了那些可以被檢測為號碼,但實際意義卻不是號碼的數字時,你可以選擇關閉當前頁面的號碼檢測行為。只要在頁面代碼加入以下中繼資料即可
- <meta name = "format-detection" content = "telephone=no">
後面一頁將為您介紹Text links(文本連結)、iTunes links(iTunes連結)、Youtube links(Youtube連結)!
(3)Text links(文本連結)
使用sms協議來載入Messages應用。該URL的正式格式為"sms:<phone>",其中<phone>是可選的,用來指定sms訊息接收者的號碼。參數值包含了數字,"+" , "-" , "." 。 HTML頁面中
- <a href="sms:">Launch Messages App</a>
- <a href="sms:1-408-555-1212">New SMS Message</a>
本地應用中
- if(![[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"sms:1-408-555-1212"]] ){
- UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"" message:@"無法開啟程式" delegate:nil cancelButtonTitle:@"確認" otherButtonTitles: nil] ;
- [alert show] ;
- }
(4)iTunes links(iTunes連結)
iTunes連結用來連結到iTunes Store中的內容。通過Apple的 iTunes Link Maker我們可以方便的查詢並擷取應用程式的連結地址。 HTML頁面中
- <a href="https://itunes.apple.com/cn/app/numbers/id361304891?mt=8">Numbers</a>
本地應用中
- [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"http://maps.apple.com/?q=cupertino"]] ;
正確的地圖連結格式規則如下
網域名稱必須為maps.apple.com
路徑不能為/maps/*
參數不能為q=*
參數不能包含view=text或dirflag=r
(5)Youtube links(Youtube連結)
Youtube連結用來載入YouTube應用程式或者連結值YouTube的web網站來播放指定的視頻。連結到Youtube的應用可以播放其視頻。連結是以http為開頭的,而非youtube。 HTML頁面中
- <a href="http://www.youtube.com/watch?v=xNsGNlDb6xY">iPhone5</a>
- <a href="http://www.youtube.com/v/xNsGNlDb6xY">iPhone5</a>
本地應用程式中
- //或 http://www.youtube.com/v/xNsGNlDb6xY
- if(![[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"http://www.youtube.com/watch?v=xNsGNlDb6xY"]] ){
- UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"" message:@"無法開啟程式" delegate:nil cancelButtonTitle:@"確認" otherButtonTitles: nil] ;
- [alert show] ;
- }