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