iOS 應(yīng)用調(diào)用

一、調(diào)用系統(tǒng)應(yīng)用

1跪但、調(diào)用app store界面方法

在實際開發(fā)中凉当,往往要推薦自己其他應(yīng)用和推薦自己的收費軟件,那么我們就需要在程序中直接連接到app store的相應(yīng)頁面嚷缭。

實際上的做法很簡單饮亏,使用的還是UIApplication類的OpenURL方法:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"程序的相應(yīng)連接"]];

1、調(diào)用其它應(yīng)用的方法

1)調(diào)用 自帶mail

[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"mailto://admin@hzlzh.com"]];

2)調(diào)用 電話phone

[[UIApplication sharedApplication] openURL:[NSURLURLWithString:@"tel://8008808888"]];

3)調(diào)用 SMS

[[UIApplicationsharedApplication] openURL:[NSURL URLWithString:@"sms://800888"]];

4)調(diào)用自帶 瀏覽器 safari

[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"http://www.hzlzh.com"]];

5)調(diào)用 Remote

[[UIApplicationsharedApplication] openURL:[NSURL URLWithString:@"remote://fff"]];

二峭状、調(diào)用自己開發(fā)的應(yīng)用

1)在plist文件中克滴,注冊對外接口

在xcode group&files 里面,展開 resources選擇info.plist

鼠標右擊information property list 优床,然后從列表中選擇URL types

右擊 add row 添加一個對象(item)右擊item add row

從列表中選擇 URL ?Schemes 再右擊添加一個對象(item1)

將item1得值設(shè)置為:myapp

這個myapp就是對外接口劝赔,其它應(yīng)用可以通過它,調(diào)用該應(yīng)用

plist如下圖所示:

\

2)調(diào)用方法

在你需要調(diào)用上面注冊過對外接口的應(yīng)用中胆敞,添加下面代碼即可:

NSURL *url ?= [NSURL URLWithString:@"myapp:"];

[[UIApplication sharedApplication] openURL:url];

通過上述兩個步驟着帽,你可以在你的應(yīng)用中,讓用戶打開你的其它應(yīng)用移层。

如果加參數(shù)的話仍翰,最好寫成@"myapp://.........",就好比http請求的“http”換成@“myapp”.

3)處理URL請求

應(yīng)用程序委托在application:handleOpenURL:方法中處理傳遞給應(yīng)用程序的URL請求。如果您已經(jīng)為自己的應(yīng)用程序注冊了定制的URL模式观话,則務(wù)必在委托中實現(xiàn)這個方法予借。

基于定制模式的URL采用的協(xié)議是請求服務(wù)的應(yīng)用程序能夠理解的。URL中包含一些注冊模式的應(yīng)用程序期望得到的信息频蛔,這些信息是該程序在處理或響應(yīng)URL請求時需要的灵迫。傳遞給application:handleOpenURL:方法的NSURL對象表示的是Cocoa Touch框架中的URL。NSURL遵循RFC 1808規(guī)范晦溪,該類中包含一些方法瀑粥,用于返回RFC 1808定義的各個URL要素,包括用戶名三圆、密碼狞换、請求、片斷舟肉、和參數(shù)字符串修噪。與您注冊的定制模式相對應(yīng)的“協(xié)議”可以使用這些URL要素來傳遞各種信息。

在程序清單1-2顯示的application:handleOpenURL:方法實現(xiàn)中路媚,傳入的URL對象在其請求和片斷部分帶有具體應(yīng)用程序的信息割按。應(yīng)用程序委托抽出這些信息—在這個例子中,是指一個to-do任務(wù)的名稱和到期日—并根據(jù)這些信息創(chuàng)建應(yīng)用程序的模型對象磷籍。

[plain]

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {

if ([[url scheme] isEqualToString:@"myapp"]) {

//處理鏈接

return YES;

}

return NO;

}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {

if ([[url scheme] isEqualToString:@"myapp"]) {

//處理鏈接

return YES;

}

return NO;

}

請務(wù)必對傳入的URL輸入進行驗證适荣。如果您希望了解如何避免URL處理的相關(guān)問題现柠,請參見安全編碼指南文檔中的驗證輸入部分。如果要了解蘋果定義的URL模式弛矛,請參見蘋果的URL模式參考

第二種處理URL請求方法

[cpp]

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

//被其他應(yīng)用調(diào)用

NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];

if(url) {//做出相應(yīng)的判斷

if ([[url scheme] isEqualToString:@"myapp"]) {

//處理鏈接

}

}

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

// Override point for customization after application launch.

self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];

self.window.rootViewController = self.viewController;

[self.window makeKeyAndVisible];

return YES;

}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

//被其他應(yīng)用調(diào)用

NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];

if(url) {//做出相應(yīng)的判斷

if ([[url scheme] isEqualToString:@"myapp"]) {

//處理鏈接

}

}

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

// Override point for customization after application launch.

self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];

self.window.rootViewController = self.viewController;

[self.window makeKeyAndVisible];

return YES;

}說明:iOS 程序啟動時總會調(diào)用application:didFinishLaunchingWithOptions:够吩,其中第二個參數(shù)launchOptions為NSDictionary類型的對象,里面存儲有此程序啟動的原因丈氓。

launchOptions中的可能鍵值見UIApplication Class Reference的Launch Options Keys節(jié) 周循。

若用戶直接啟動,lauchOptions內(nèi)無數(shù)據(jù);

若由其他應(yīng)用程序通過openURL:啟動万俗,則UIApplicationLaunchOptionsURLKey對應(yīng)的對象為啟動URL(NSURL),UIApplicationLaunchOptionsSourceApplicationKey對應(yīng)啟動的源應(yīng)用程序的bundle ID (NSString)湾笛;

若由本地通知啟動,則UIApplicationLaunchOptionsLocalNotificationKey對應(yīng)的是為啟動應(yīng)用程序的的本地通知對象(UILocalNotification)闰歪;

若由遠程通知啟動嚎研,則UIApplicationLaunchOptionsRemoteNotificationKey對應(yīng)的是啟動應(yīng)用程序的的遠程通知信息userInfo(NSDictionary);

其他key還有UIApplicationLaunchOptionsAnnotationKey,UIApplicationLaunchOptionsLocationKey,

UIApplicationLaunchOptionsNewsstandDownloadsKey库倘。

參考:http://blog.csdn.net/tiger119/article/details/7949004

4).快速測試外部調(diào)用

1.回到Home屏幕,啟動Safari(在iPhone仿真器上,在菜單上選擇Hardware->Home命令就可以回到Home屏幕)临扮。

2.在Safari的地址欄中,鍵入使用定制模式的URL,即“myapp:”教翩,加參數(shù)的話則為“myapp://........”

3.確認您的應(yīng)用程序是否啟動,以及應(yīng)用程序委托是否收到application:handleOpenURL:消息杆勇。

三、官方原理講解

和其它應(yīng)用程序進行通訊

如果一個應(yīng)用程序支持一些已知類型的URL饱亿,您就可以通過對應(yīng)的URL模式和該程序進行通訊蚜退。然而,在大多數(shù)情況下彪笼,URL只是用于簡單地啟動一個應(yīng)用程序并顯示一些和調(diào)用方有關(guān)的信息钻注。舉例來說,對于一個用于管理地址信息的應(yīng)用程序杰扫,您就可以在發(fā)送給它的URL中包含一個Maps程序可以處理的地址队寇,以便顯示相應(yīng)的位置膘掰。這個級別的通訊為用戶創(chuàng)造一個集成度高得多的環(huán)境章姓,減少應(yīng)用程序重新實現(xiàn)設(shè)備上其它程序已經(jīng)實現(xiàn)的功能的必要性。

蘋果內(nèi)置支持http识埋、mailto凡伊、tel、和sms這些URL模式窒舟,還支持基于http的系忙、指向Maps、YouTube惠豺、和iPod程序的URL银还。應(yīng)用程序也可以自己注冊定制的URL模式风宁。您的應(yīng)用程序可以和其它應(yīng)用程序通訊,具體方法是用正確格式的內(nèi)容創(chuàng)建一個NSURL對象蛹疯,然后將它傳給共享UIApplication對象openURL:方法戒财。openURL:方法會啟動注冊接收該URL類型的應(yīng)用程序,并將URL傳給它捺弦。當用戶最終退出該應(yīng)用程序時饮寞,系統(tǒng)通常會重新啟動您的應(yīng)用程序,但并不總是這樣列吼。系統(tǒng)會考慮用戶在URL處理程序中的動作及在用戶看來返回您的應(yīng)用程序是否合理幽崩,然后做出決定。

下面的代碼片斷展示了一個程序如何請求另一個程序提供的服務(wù)(假定這個例子中的“todolist”是由應(yīng)用程序注冊的定制模式):

NSURL *myURL = [NSURL URLWithString:@"todolist://www.acme.com?Quarterly%20Report#200806231300"];

[[UIApplication sharedApplication] openURL:myURL];

要提示:如果您的URL類型包含的模式和蘋果定義的一樣寞钥,則啟動的是蘋果提供的程序慌申,而不是您的程序。如果有多個第三方的應(yīng)用程序注冊處理同樣的URL模式凑耻,則該類型的URL由哪個程序處理是沒重要提示:如果您的URL類型包含的模式和蘋果定義的一樣太示,則啟動的是蘋果提供的程序,而不是您的程序香浩。如果有多個第三方的應(yīng)用程序注冊處理同樣的URL模式类缤,則該類型的URL由哪個程序處理是沒有定義的。

如果您的應(yīng)用程序定義了自己的URL模式邻吭,則應(yīng)該實現(xiàn)對該模式進行處理的方法餐弱,具體信息在“實現(xiàn)定制的URL模式”部分中進行描述。有關(guān)系統(tǒng)支持的URL處理囱晴,包括如何處理URL的格式膏蚓,請參見蘋果的URL模式參考。

實現(xiàn)定制的URL模式

您可以為自己的應(yīng)用程序注冊包含定制模式的URL類型畸写。定制的URL模式是第三方應(yīng)用程序和其它程序及系統(tǒng)進行交互的機制驮瞧。通過定制的URL模式,應(yīng)用程序可以將自己的服務(wù)提供給其它程序枯芬。

注冊定制的URL模式

在為您的應(yīng)用程序注冊URL類型時论笔,必須指定CFBundleURLTypes屬性的子屬性,我們已經(jīng)在“信息屬性列表”部分中介紹過這個屬性了千所。CFBundleURLTypes屬性是應(yīng)用程序的Info.plist文件中的一個字典數(shù)組狂魔,每個字典負責(zé)定義一個應(yīng)用程序支持的URL類型。表1-6描述了CFBundleURLTypes字典的鍵和值淫痰。

表1-6 ?CFBundleURLTypes屬性的鍵和值 鍵

CFBundleURLName

這是個字符串最楷,表示URL類型的抽象名。為了確保其唯一性,建議您使用反向DNS風(fēng)格的標識籽孙,比如com.acme.myscheme烈评。

這里提供的URL類型名是一個指向本地化字符串的鍵,該字符串位于本地化語言包子目錄中的InfoPlist.strings文件中犯建。本地化字符串是人類可識別的URL類型名稱础倍,用相應(yīng)的語言來表示。

CFBundleURLSchemes

這是個URL模式的數(shù)組胎挎,表示歸屬于這個URL類型的URL沟启。每個模式都是一個字符串。屬于指定URL類型的URL都帶有它們的模式組件犹菇。

圖1-7顯示了一個正在用內(nèi)置的Xcode編輯器編輯的Info.plist文件德迹。在這個圖中,左列中的URL類型入口相當于您直接加入到Info.plist文件的CFBundleURLTypes鍵揭芍。類似地胳搞,“URL identifier”和“URL Schemes”入口相當于CFBundleURLName和CFBundleURLSchemes鍵。

在Info.plist文件中定義一個定制的URL模式

您在對CFBundleURLTypes屬性進行定義称杨,從而注冊帶有定制模式的URL類型之后肌毅,可以通過下面的方式來進行測試:

連編、安裝姑原、和運行您的應(yīng)用程序悬而。

回到Home屏幕,啟動Safari(在iPhone仿真器上锭汛,在菜單上選擇Hardware > Home命令就可以回到Home屏幕)笨奠。

在Safari的地址欄中,鍵入使用定制模式的URL唤殴。

確認您的應(yīng)用程序是否啟動般婆,以及應(yīng)用程序委托是否收到application:handleOpenURL:消息。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末朵逝,一起剝皮案震驚了整個濱河市蔚袍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌配名,老刑警劉巖啤咽,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異段誊,居然都是意外死亡闰蚕,警方通過查閱死者的電腦和手機栈拖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門连舍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事索赏∨涡” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵潜腻,是天一觀的道長埃儿。 經(jīng)常有香客問我,道長融涣,這世上最難降的妖魔是什么童番? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮威鹿,結(jié)果婚禮上剃斧,老公的妹妹穿的比我還像新娘。我一直安慰自己忽你,他們只是感情好幼东,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著科雳,像睡著了一般根蟹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上糟秘,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天简逮,我揣著相機與錄音,去河邊找鬼尿赚。 笑死买决,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的吼畏。 我是一名探鬼主播督赤,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼泻蚊!你這毒婦竟也來了躲舌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤性雄,失蹤者是張志新(化名)和其女友劉穎没卸,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秒旋,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡约计,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了迁筛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片煤蚌。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尉桩,到底是詐尸還是另有隱情筒占,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布蜘犁,位于F島的核電站翰苫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏这橙。R本人自食惡果不足惜奏窑,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屈扎。 院中可真熱鬧良哲,春花似錦、人聲如沸助隧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽并村。三九已至巍实,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哩牍,已是汗流浹背棚潦。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留膝昆,地道東北人丸边。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像荚孵,于是被迫代替她去往敵國和親妹窖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

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