IOS 內置URL schemes簡介


       在IOS的應用中常常會看到一些應用程序經過某個點擊動做而直接跳到App Store頁面,開始很奇怪這種第三方應用於IOS的系統應用交互時怎麼實現的。後來發現蘋果的開發者文檔中關於這種通訊的實現是默認支持的,只要第三方的應用符合規範便可,這裏的規範就是指接下來咱們要簡單介紹的東西——URL Schemes

       根據規定,IOS中支持幾種特殊的URL schemes,第三方的本地應用程序和運行在Safari的Web應用程序,經過這些URL schemes能夠與IOS的系統應用進行整合,爲的是爲用戶提供一種無縫的用戶體驗過程。某些手機IOS應用中都會展現一些電話號碼信息,在用戶點擊這些號碼時,經過使用規定內合適的URL,應用程序能夠打開手機的Phone Application進行撥號呼叫操做。這是一種很快捷的方式,省去了用戶要記憶號碼,而後再逐次撥號的流程。

URL scheme打開方式 html

       根據第三方應用程序的類型,打開IOS系統應用的方式劃分爲兩種

             1. Native App或咱們常稱呼的本地應用,能夠經過UIApplication的openURL:方法來系統應用
             2.Web App或咱們常稱呼的Web應用,指的是那些運行在Safari瀏覽器中或經過UIWebView 內嵌入本地應用的的Web應用程序,能夠經過點擊或長按操做打開系統應用。

       固然,順利打開系統應用的前提是兩者都要保證提供指定的附和規範的URL scheme。

URL Scheme分類 ios

       IOS支持的URL Schemes分爲如下幾類

         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!

         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(文本連接)

       使用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] ;
}
        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>
       本地應用中
if(![[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"https://itunes.apple.com/cn/app/numbers/id361304891?mt=8"]] ){
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"" message:@"沒法打開程序" delegate:nil cancelButtonTitle:@"確認" otherButtonTitles: nil] ;
    [alert show] ;
}
        Map links(地圖連接)

       地圖連接用來顯示地理位置或指引駕駛方向。在Web App中的連接會直接跳到地圖頁面,本地應用會直接打開IOS的地圖應用。如
       HTML頁面中
<a href="http://maps.apple.com/?q=cupertino">Cupertino</a>
       本地應用
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"http://maps.apple.com/?q=cupertino"]] ;
       正確的地圖連接格式規則以下
  • 域名必須爲maps.apple.com
  • 路徑不能爲/maps/*
  • 參數不能爲q=*
  • 參數不能包含view=text或dirflag=r
        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] ;
}

注:描述於IOS6.0下,關於地圖協議,在IOS5.X版本使用的地圖爲Google Map,詳情參見IOS5.X對應的開發者文檔。 git

參見:Apple URL Reference
代碼: Demo github

相關文章
相關標籤/搜索