一、調用系統應用
1、調用app store界面方法
在實際開發中,往往要推薦自己其他應用和推薦自己的收費軟件,那麼我們就需要在程序中直接連接到app store的相應頁面。
實際上的做法很簡單,使用的還是UIApplication類的OpenURL方法:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"程序的相應連接"]];
1、調用其它應用的方法
1)調用 自帶mail
[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"mailto://[email protected]"]];
2)調用 電話phone
[[UIApplication sharedApplication] openURL:[NSURLURLWithString:@"tel://8008808888"]];
3)調用 SMS
[[UIApplicationsharedApplication] openURL:[NSURL URLWithString:@"sms://800888"]];
4)調用自帶 瀏覽器 safari
[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"http://www.hzlzh.com"]];
5)調用 Remote
[[UIApplicationsharedApplication] openURL:[NSURL URLWithString:@"remote://fff"]];
參考:http://blog.csdn.net/yhawaii/article/details/7587355
二、調用自己開發的應用
1)在plist文件中,註冊對外接口
在xcode group&files 裏面,展開 resources選擇<app>info.plist
鼠標右擊information property list ,然後從列表中選擇URL types
右擊 add row 添加一個對象(item)右擊item add row
從列表中選擇 URL Schemes 再右擊添加一個對象(item1)
將item1得值設置爲:myapp
這個myapp就是對外接口,其它應用可以通過它,調用該應用
plist如下圖所示:
2)調用方法
在你需要調用上面註冊過對外接口的應用中,添加下面代碼即可:
NSURL *url = [NSURL URLWithString:@"myapp:"];
[[UIApplication sharedApplication] openURL:url];
通過上述兩個步驟,你可以在你的應用中,讓用戶打開你的其它應用。
如果加參數的話,最好寫成@"myapp://.........",就好比http請求的“http”換成@“myapp”.
3)處理URL請求
應用程序委託在application:handleOpenURL:
方法中處理傳遞給應用程序的URL請求。如果您已經爲自己的應用程序註冊了定製的URL模式,則務必在委託中實現這個方法。
基於定製模式的URL採用的協議是請求服務的應用程序能夠理解的。URL中包含一些註冊模式的應用程序期望得到的信息,這些信息是該程序在處理或響應URL請求時需要的。傳遞給application:handleOpenURL:
方法的NSURL
對象表示的是Cocoa
Touch框架中的URL。NSURL
遵循RFC 1808規範,該類中包含一些方法,用於返回RFC 1808定義的各個URL要素,包括用戶名、密碼、請求、片斷、和參數字符串。與您註冊的定製模式相對應的“協議”可以使用這些URL要素來傳遞各種信息。
在程序清單1-2顯示的application:handleOpenURL:
方法實現中,傳入的URL對象在其請求和片斷部分帶有具體應用程序的信息。應用程序委託抽出這些信息—在這個例子中,是指一個to-do任務的名稱和到期日—並根據這些信息創建應用程序的模型對象。
- - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
- if ([[url scheme] isEqualToString:@"myapp"]) {
- //處理鏈接
- return YES;
- }
- return NO;
- }
請務必對傳入的URL輸入進行驗證。如果您希望瞭解如何避免URL處理的相關問題,請參見安全編碼指南文檔中的驗證輸入部分。如果要了解蘋果定義的URL模式,請參見蘋果的URL模式參考
- - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- {
- //被其他應用調用
- NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];
- if(url) {//做出相應的判斷
- 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;
- }
launchOptions中的可能鍵值見UIApplication Class Reference的Launch Options Keys節 。
若用戶直接啓動,lauchOptions內無數據;
若由其他應用程序通過openURL:啓動,則UIApplicationLaunchOptionsURLKey對應的對象爲啓動URL(NSURL),UIApplicationLaunchOptionsSourceApplicationKey對應啓動的源應用程序的bundle ID (NSString);
若由本地通知啓動,則UIApplicationLaunchOptionsLocalNotificationKey對應的是爲啓動應用程序的的本地通知對象(UILocalNotification);
若由遠程通知啓動,則UIApplicationLaunchOptionsRemoteNotificationKey對應的是啓動應用程序的的遠程通知信息userInfo(NSDictionary);
其他key還有UIApplicationLaunchOptionsAnnotationKey,UIApplicationLaunchOptionsLocationKey,
UIApplicationLaunchOptionsNewsstandDownloadsKey。
參考:http://blog.csdn.net/tiger119/article/details/7949004
4).快速測試外部調用
1.回到Home屏幕,啓動Safari(在iPhone仿真器上,在菜單上選擇Hardware->Home命令就可以回到Home屏幕)。2.在Safari的地址欄中,鍵入使用定製模式的URL,即“myapp:”,加參數的話則爲“myapp://........”
3.確認您的應用程序是否啓動,以及應用程序委託是否收到application:handleOpenURL:消息。
三、官方原理講解
和其它應用程序進行通訊
如果一個應用程序支持一些已知類型的URL,您就可以通過對應的URL模式和該程序進行通訊。然而,在大多數情況下,URL只是用於簡單地啓動一個應用程序並顯示一些和調用方有關的信息。舉例來說,對於一個用於管理地址信息的應用程序,您就可以在發送給它的URL中包含一個Maps程序可以處理的地址,以便顯示相應的位置。這個級別的通訊爲用戶創造一個集成度高得多的環境,減少應用程序重新實現設備上其它程序已經實現的功能的必要性。
蘋果內置支持http
、mailto
、tel
、和sms
這些URL模式,還支持基於http
的、指向Maps、YouTube、和iPod程序的URL。應用程序也可以自己註冊定製的URL模式。您的應用程序可以和其它應用程序通訊,具體方法是用正確格式的內容創建一個NSURL
對象,然後將它傳給共享UIApplication
對象openURL:
方法。openURL:
方法會啓動註冊接收該URL類型的應用程序,並將URL傳給它。當用戶最終退出該應用程序時,系統通常會重新啓動您的應用程序,但並不總是這樣。系統會考慮用戶在URL處理程序中的動作及在用戶看來返回您的應用程序是否合理,然後做出決定。
下面的代碼片斷展示了一個程序如何請求另一個程序提供的服務(假定這個例子中的“todolist”是由應用程序註冊的定製模式):
NSURL *myURL = [NSURL URLWithString:@"todolist://www.acme.com?Quarterly%20Report#200806231300"]; |
[[UIApplication sharedApplication] openURL:myURL]; |
如果您的應用程序定義了自己的URL模式,則應該實現對該模式進行處理的方法,具體信息在“實現定製的URL模式”部分中進行描述。有關係統支持的URL處理,包括如何處理URL的格式,請參見蘋果的URL模式參考。
實現定製的URL模式
您可以爲自己的應用程序註冊包含定製模式的URL類型。定製的URL模式是第三方應用程序和其它程序及系統進行交互的機制。通過定製的URL模式,應用程序可以將自己的服務提供給其它程序。
註冊定製的URL模式
在爲您的應用程序註冊URL類型時,必須指定CFBundleURLTypes
屬性的子屬性,我們已經在“信息屬性列表”部分中介紹過這個屬性了。CFBundleURLTypes
屬性是應用程序的Info.plist
文件中的一個字典數組,每個字典負責定義一個應用程序支持的URL類型。表1-6描述了CFBundleURLTypes
字典的鍵和值。
鍵 |
值 |
---|---|
|
這是個字符串,表示URL類型的抽象名。爲了確保其唯一性,建議您使用反向DNS風格的標識,比如
這裏提供的URL類型名是一個指向本地化字符串的鍵,該字符串位於本地化語言包子目錄中的 |
|
這是個URL模式的數組,表示歸屬於這個URL類型的URL。每個模式都是一個字符串。屬於指定URL類型的URL都帶有它們的模式組件。 |
圖1-7顯示了一個正在用內置的Xcode編輯器編輯的Info.plist
文件。在這個圖中,左列中的URL類型入口相當於您直接加入到Info.plist文件的CFBundleURLTypes
鍵。類似地,“URL
identifier”和“URL Schemes”入口相當於CFBundleURLName
和CFBundleURLSchemes
鍵。
在Info.plist
文件中定義一個定製的URL模式
您在對CFBundleURLTypes
屬性進行定義,從而註冊帶有定製模式的URL類型之後,可以通過下面的方式來進行測試:
-
連編、安裝、和運行您的應用程序。
-
回到Home屏幕,啓動Safari(在iPhone仿真器上,在菜單上選擇Hardware > Home命令就可以回到Home屏幕)。
-
在Safari的地址欄中,鍵入使用定製模式的URL。
-
確認您的應用程序是否啓動,以及應用程序委託是否收到
application:handleOpenURL:
消息。