iOS調用其他應用 的寫法

來源:互聯網
上載者:User

一、調用系統應用

  1、調用app store介面方法在實際開發中,往往要推薦自己其他應用和推薦自己的收費軟體,那麼我們就需要在程式中直接連接到app store的相應頁面。 實際上的做法很簡單,使用的還是UIApplication類的OpenURL方法:  [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"程式的相應串連"]];    1、調用其它應用的方法1)調用 內建mail
  [[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"mailto://admin@hzlzh.com"]];  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"]];    


  二、調用自己開發的應用  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任務的名稱和到期日—並根據這些資訊建立應用程式的模型對象。 [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;}請務必對傳入的URL輸入進行驗證。如果您希望瞭解如何避免URL處理的相關問題,請參見安全編碼指南文檔中的驗證輸入部分。如果要瞭解蘋果定義的URL模式,請參見蘋果的URL模式參考  第二種處理URL要求方法[cpp]
- (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;  }   - (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;}說明:iOS 程式啟動時總會調用application:didFinishLaunchingWithOptions:,其中第二個參數launchOptions為NSDictionary類型的對象,裡面儲存有此程式啟動的原因。 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模式參考。    實現定製的URL模式您可以為自己的應用程式註冊包含定製模式的URL類型。定製的URL模式是第三方應用程式和其它程式及系統進行互動的機制。通過定製的URL模式,應用程式可以將自己的服務提供給其它程式。    註冊定製的URL模式在為您的應用程式註冊URL類型時,必須指定CFBundleURLTypes屬性的子屬性,我們已經在“資訊屬性列表”部分中介紹過這個屬性了。CFBundleURLTypes屬性是應用程式的Info.plist檔案中的一個字典數組,每個字典負責定義一個應用程式支援的URL類型。表1-6描述了CFBundleURLTypes字典的鍵和值。    表1-6  CFBundleURLTypes屬性的鍵和值 鍵 值 CFBundleURLName 這是個字串,表示URL類型的抽象名。為了確保其唯一性,建議您使用反向DNS風格的標識,比如com.acme.myscheme。 這裡提供的URL類型名是一個指向本地化字串的鍵,該字串位於本地化語言套件子目錄中的InfoPlist.strings檔案中。本地化字串是人類可識別的URL類型名稱,用相應的語言來表示。 CFBundleURLSchemes 這是個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:訊息。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.