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

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

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

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

實(shí)際上的做法很簡(jiǎn)單,使用的還是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)用自己開(kāi)發(fā)的應(yīng)用

1)在plist文件中,注冊(cè)對(duì)外接口

在xcode group&files 里面,展開(kāi) resources選擇info.plist

鼠標(biāo)右擊information property list ,然后從列表中選擇URL types

右擊 add row 添加一個(gè)對(duì)象(item)右擊item add row

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

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

這個(gè)myapp就是對(duì)外接口,其它應(yīng)用可以通過(guò)它,調(diào)用該應(yīng)用

plist如下圖所示:

\

2)調(diào)用方法

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

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

[[UIApplication sharedApplication] openURL:url];

通過(guò)上述兩個(gè)步驟,你可以在你的應(yīng)用中,讓用戶打開(kāi)你的其它應(yīng)用。

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

3)處理URL請(qǐng)求

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

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

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

[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;

}

請(qǐng)務(wù)必對(duì)傳入的URL輸入進(jìn)行驗(yàn)證。如果您希望了解如何避免URL處理的相關(guān)問(wèn)題,請(qǐng)參見(jiàn)安全編碼指南文檔中的驗(yàn)證輸入部分。如果要了解蘋(píng)果定義的URL模式,請(qǐng)參見(jiàn)蘋(píng)果的URL模式參考

第二種處理URL請(qǐng)求方法

[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;

}說(shuō)明:iOS 程序啟動(dòng)時(shí)總會(huì)調(diào)用application:didFinishLaunchingWithOptions:,其中第二個(gè)參數(shù)launchOptions為NSDictionary類型的對(duì)象,里面存儲(chǔ)有此程序啟動(dòng)的原因。

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

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

若由其他應(yīng)用程序通過(guò)openURL:啟動(dòng),則UIApplicationLaunchOptionsURLKey對(duì)應(yīng)的對(duì)象為啟動(dòng)URL(NSURL),UIApplicationLaunchOptionsSourceApplicationKey對(duì)應(yīng)啟動(dòng)的源應(yīng)用程序的bundle ID (NSString);

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

若由遠(yuǎn)程通知啟動(dòng),則UIApplicationLaunchOptionsRemoteNotificationKey對(duì)應(yīng)的是啟動(dòng)應(yīng)用程序的的遠(yuǎn)程通知信息userInfo(NSDictionary);

其他key還有UIApplicationLaunchOptionsAnnotationKey,UIApplicationLaunchOptionsLocationKey,

UIApplicationLaunchOptionsNewsstandDownloadsKey。

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

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

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

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

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

三、官方原理講解

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

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

蘋(píng)果內(nèi)置支持http、mailto、tel、和sms這些URL模式,還支持基于http的、指向Maps、YouTube、和iPod程序的URL。應(yīng)用程序也可以自己注冊(cè)定制的URL模式。您的應(yīng)用程序可以和其它應(yīng)用程序通訊,具體方法是用正確格式的內(nèi)容創(chuàng)建一個(gè)NSURL對(duì)象,然后將它傳給共享UIApplication對(duì)象openURL:方法。openURL:方法會(huì)啟動(dòng)注冊(cè)接收該URL類型的應(yīng)用程序,并將URL傳給它。當(dāng)用戶最終退出該應(yīng)用程序時(shí),系統(tǒng)通常會(huì)重新啟動(dòng)您的應(yīng)用程序,但并不總是這樣。系統(tǒng)會(huì)考慮用戶在URL處理程序中的動(dòng)作及在用戶看來(lái)返回您的應(yīng)用程序是否合理,然后做出決定。

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

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

[[UIApplication sharedApplication] openURL:myURL];

要提示:如果您的URL類型包含的模式和蘋(píng)果定義的一樣,則啟動(dòng)的是蘋(píng)果提供的程序,而不是您的程序。如果有多個(gè)第三方的應(yīng)用程序注冊(cè)處理同樣的URL模式,則該類型的URL由哪個(gè)程序處理是沒(méi)重要提示:如果您的URL類型包含的模式和蘋(píng)果定義的一樣,則啟動(dòng)的是蘋(píng)果提供的程序,而不是您的程序。如果有多個(gè)第三方的應(yīng)用程序注冊(cè)處理同樣的URL模式,則該類型的URL由哪個(gè)程序處理是沒(méi)有定義的。

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

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

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

注冊(cè)定制的URL模式

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

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

CFBundleURLName

這是個(gè)字符串,表示URL類型的抽象名。為了確保其唯一性,建議您使用反向DNS風(fēng)格的標(biāo)識(shí),比如com.acme.myscheme。

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

CFBundleURLSchemes

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

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

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

您在對(duì)CFBundleURLTypes屬性進(jìn)行定義,從而注冊(cè)帶有定制模式的URL類型之后,可以通過(guò)下面的方式來(lái)進(jìn)行測(cè)試:

連編、安裝、和運(yùn)行您的應(yīng)用程序。

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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容