iOS開發(fā)——iOS中的URL Scheme

iOS 支持從一個(gè) App 跳轉(zhuǎn)到另一個(gè) App宅倒,這其中的原理就是 URL SCheme躏啰。這一功能特別炫酷卓嫂,當(dāng)你在 iphone 上使用 Safari 瀏覽器時(shí)榔昔,通過輸入正確的 url 喚起對應(yīng)的 app,你也可以在某個(gè) App 內(nèi)直接跳轉(zhuǎn)到另外一個(gè) App定硝。雖然 iOS 系統(tǒng)的沙盒機(jī)制阻擋了不同 App 之間的交流皿桑,但是 URL Scheme 這一特性卻又允許開發(fā)者實(shí)現(xiàn)不同 App 間的通信。

系統(tǒng) URL Scheme

系統(tǒng)已經(jīng)給開發(fā)者提供了幾個(gè)系統(tǒng) App 對應(yīng)的 URL Scheme蔬啡,從官方文檔中可以找到這幾種通用 URL SCheme 的調(diào)用方式诲侮。這些功能包括打電話、發(fā)郵件箱蟆、發(fā)短信等等沟绪。

發(fā)郵件
// html
<a href="mailto:frank@wwdcdemo.example.com">John Frank</a>

// objective-c
mailto:frank@wwdcdemo.example.com

// 包含主題、消息空猜、發(fā)件人等信息
mailto:foo@example.com?cc=bar@example.com&subject=Greetings%20from%20Cupertino!&body=Wish%20you%20were%20here!

注:如果沒有安裝郵件類 App绽慈,系統(tǒng)會(huì)給出一個(gè)錯(cuò)誤提示。

打電話
// html
<a href="tel:1-408-555-5555">1-408-555-5555</a>

// objective-c
tel:1-408-555-5555

注:如果是在 web 頁面點(diǎn)擊一個(gè)電話鏈接辈毯,系統(tǒng)會(huì)彈出提示框坝疼,但是 app 內(nèi)開發(fā)者打開一個(gè)打電話的鏈接,系統(tǒng)不會(huì)彈出提示框谆沃,但是希望 native 通過 Alert
的方式提示用戶钝凶。

發(fā)短信
// html
<a href="sms:">Launch Messages App</a>
<a href="sms:1-408-555-1212">New SMS Message</a>

// objective-c
sms:
sms:1-408-555-1212
地圖

地圖 scheme 用于展示地理位置信息或者生成兩點(diǎn)之間的駕駛導(dǎo)航,但是跟其他 scheme 不同管毙,系統(tǒng)地圖 app 的喚起是采用通用 http 格式的鏈接進(jìn)行啟動(dòng)的腿椎。同時(shí)需要注意桌硫,連接后面通過參數(shù)指定具體的功能夭咬。

// 參數(shù)類型
t:地圖視圖模式啃炸,m (標(biāo)準(zhǔn)視圖)、k (衛(wèi)星視圖)卓舵、h (混合視圖)南用、r (運(yùn)輸視圖)
q:查詢內(nèi)容
address:地址內(nèi)容
near:提示信息
ll:地圖中心的定位坐標(biāo)
z:縮放等級(jí)
spn:圍繞中心點(diǎn)的轉(zhuǎn)速
saddr:源地址
daddr:目的地地址
dirflg:傳輸類型
sll:搜索定位坐標(biāo)
sspn:屏幕的轉(zhuǎn)速
// link sample
http://maps.apple.com/?q=Mexican+Restaurant
打開 iTunes

用于鏈接到 iTunes 音樂商店

// html
<a >
<img height="15" width="61" alt="Randy Newman - Toy Story
- You've Got a Friend In Me" src="http://ax.phobos.apple.com.edgesuite.net/images/
badgeitunes61x15dark.gif"></img>
</a>

// native
http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=156093464&id=156093462&s=143441

第三方 URL Scheme

常用的 App 對應(yīng)的 URL Scheme 列舉如下,不過掏湾,下方列舉出的 URL Scheme
只是基本的 Scheme裹虫,如果想了解具體的功能及其參數(shù)就需要查看官方文檔或者直接使用第三方的SDK了。

淘寶寶貝搜索 taobao://[http://s.taobao.com/?q=xxx]
淘寶店鋪搜索 taobao://[http://shopsearch.taobao.com/browse/shop_search.htm?q=**]
QQ的url是 mqq://
微信是weixin://
淘寶taobao://
點(diǎn)評(píng)dianping:// dianping://search
微博 sinaweibo://
名片全能王camcard://weico
微博weico://
支付寶alipay://
豆瓣fm:doubanradio://
微盤 sinavdisk://
網(wǎng)易公開課ntesopen://
美團(tuán) imeituan://
京冬openapp.jdmoble://
人人renren://
我查查 wcc://
1號(hào)店wccbyihaodian://
有道詞典yddictproapp://
知乎zhihu://
優(yōu)酷 youku://

自定義 URL Scheme

給 iPhone 手機(jī)安裝 App 時(shí)融击,如果這個(gè) App 設(shè)置了 URL Scheme筑公,安裝完成后 iOS 系統(tǒng)會(huì)自動(dòng)注冊該 URL Scheme,這樣其他 App 或者瀏覽器就可以通過 URL 的方式找到對應(yīng)的 App 并喚起該 App尊浪。

除了喚起 App 這樣基本的功能外匣屡,不同 App 之間消息傳遞也經(jīng)常用該方案。像微信拇涤、微博分享捣作、微信、支付寶付款鹅士,等等券躁。

那么,看一下如何給一個(gè) App 自定義 URL Scheme掉盅。
其實(shí)很簡單:


設(shè)置URLScheme.png

這里也拜,我們設(shè)置了 URL Scheme 為 "fusion"。

但是這樣還沒完事趾痘,你只是注冊了當(dāng)前 App 的 Scheme慢哈,但是,應(yīng)用是否允許喚起還需要做一步操作扼脐,那就是監(jiān)聽喚起事件岸军。在 AppDelegate.m文件中,實(shí)現(xiàn)相應(yīng)的代理方法:

// return NO 則不允許喚起(實(shí)際不生效瓦侮,費(fèi)解)
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options;

特別的艰赞,iOS9之后,新增了白名單概念肚吏。如果沒有在 info.plist 添加白名單方妖,則會(huì)有如下結(jié)果:

BOOL result = [[UIApplication sharedApplication] canOpenURL:url]; // result = NO;

同時(shí),控制臺(tái)打印類似下面的錯(cuò)誤提示信息:

-canOpenURL: failed for URL: "XXX://" - error: "This app is not allowed to query for scheme TestB"

解決這一問題很簡單罚攀,添加白名單即可党觅。
info.plist 里添加 key 為 LSApplicationQueriesSchemes 的字段雌澄,類型為 Array。依次填入 App 支持的第三方 app 的 scheme 即可杯瞻。

調(diào)用自定義 URL Scheme

繼續(xù)上面這個(gè)例子镐牺,我們看看如何通過 URL Scheme 喚起這個(gè) app。
一開始也提到了魁莉,要么通過 Safari 要么通過應(yīng)用內(nèi)跳轉(zhuǎn)睬涧,當(dāng)然,最簡單的方法就是前者了旗唁。

Safari喚起app
Safari提示
監(jiān)聽結(jié)果

此時(shí)畦浓,Demo 客戶端就被喚起了。

那么检疫,通過其他 App 來喚起 fusion App 該如何做呢讶请?

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fusion://"]]){
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"fusion://"]];
   } else {
       //提示用戶未安裝app
   }

先判斷系統(tǒng)是否安裝相應(yīng) Scheme 的 App,即是否注冊 Scheme屎媳,然后再打開對應(yīng)的 App夺溢。

使用注意

http://www.feng.com/iPhone/news/2015-03-23/Alert-to-iOS-URL-Scheme-can-hijack-payment-password_610511.shtml

參考:

Refenrance(官網(wǎng))
Sample Code(官網(wǎng))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市剿牺,隨后出現(xiàn)的幾起案子企垦,更是在濱河造成了極大的恐慌,老刑警劉巖晒来,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钞诡,死亡現(xiàn)場離奇詭異,居然都是意外死亡湃崩,警方通過查閱死者的電腦和手機(jī)荧降,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來攒读,“玉大人朵诫,你說我怎么就攤上這事””猓” “怎么了剪返?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長邓梅。 經(jīng)常有香客問我脱盲,道長,這世上最難降的妖魔是什么日缨? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任钱反,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘面哥。我一直安慰自己哎壳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布尚卫。 她就那樣靜靜地躺著归榕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪焕毫。 梳的紋絲不亂的頭發(fā)上蹲坷,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天驶乾,我揣著相機(jī)與錄音邑飒,去河邊找鬼。 笑死级乐,一個(gè)胖子當(dāng)著我的面吹牛疙咸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播风科,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼撒轮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了贼穆?” 一聲冷哼從身側(cè)響起题山,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎故痊,沒想到半個(gè)月后顶瞳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡愕秫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年慨菱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戴甩。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡符喝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出甜孤,到底是詐尸還是另有隱情协饲,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布缴川,位于F島的核電站茉稠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏二跋。R本人自食惡果不足惜战惊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吞获,春花似錦况凉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至烤黍,卻和暖如春知市,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背速蕊。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國打工嫂丙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人规哲。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓跟啤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親唉锌。 傳聞我的和親對象是個(gè)殘疾皇子隅肥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • Swift版本點(diǎn)擊這里歡迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh閱讀 25,424評(píng)論 7 249
  • 大學(xué),當(dāng)我三天除了上課汞舱,看書伍纫,睡覺,玩手機(jī)后昂芜,想出了“無聊”這一問題莹规。何所謂無聊?無所事事泌神,沒有生命力良漱。 人是...
    余溫好似涼白開閱讀 278評(píng)論 1 0
  • 清晨的雨滴嬌打著盛夏氣息 每片葉尖上掛著晶瑩的雨珠 遠(yuǎn)方的風(fēng)兒輕輕地扶動(dòng)細(xì)枝 溫柔的搖落著葉尖上的雨珠 滴答滴答,...
    丁萬萬閱讀 295評(píng)論 0 4