問題描述:須要從一個ios應用程序中,能啓動另外一個ios應用程序。ios
開發環境:xcode7.3.1xcode
關鍵詞:白名單(LSApplicationQueriesSchemes)、註冊本身的URLapp
Demo源代碼連接:http://pan.baidu.com/s/1bo327sb函數
如何從一個app中,啓動另外一個app???本人ios菜鳥(工做須要,剛開始自學ios,現學現賣,哈哈)參考網上若干文章,實現了這個功能。目前,將demo分享出來。學習
新建一個工程MyAppOne,在info.plist 文件中添加字段,註冊 MyAppOne的URL.url
1.1在 Information Property List中,點擊「+」 添加 URL types,添加一個Item,再在Item中,添加「URL Schemes」,再在URL Schemes的Item中,添加一個字符串「AppDemo1」(參考下圖),該字符串 即爲 當前 工程 MyAppOne 本身 爲本身註冊的 URL。註冊本身的URL完成。spa
1.2咱們剛纔註冊的本身的URL,就至關於咱們當前的工程MyAppOne的一個身份標識。其餘app經過ios提供的接口(後面會介紹是ios 的哪一個函數),調用這個URL就能啓動咱們這個MyAppOne應用程序了。code
在ios9之後,須要在info.plist文件中添加 LSApplicationQueriesSchemes(白名單),才能合法啓動你想要啓動的那個app。白名單中添加的,是你想要啓動的app的 URL(這個URL就是上面講解的「註冊本身的URL」)。orm
2.1 添加 LSApplicationQueriesSchemes。(當前的工程是xcode7.3.1,xcode沒有自動匹配 LSApplicationQueriesSchemes,所以,須要你手動輸入這個字段,並將它的屬性改成【Array】),在 LSApplicationQueriesSchemes 中添加「AppDemo2」。blog
咱們假設已經有一個MyAppTwo,它註冊的URL是 AppDemo2。咱們想在MyAppOne工程去啓動的MyAppTwo這個app,就須要在白名單中添加MyAppTwo的URL。
3.1 字符串AppDemo2後面的 "://"是必須添加的,不然會 沒法打開你指定的app的URL的。
3.2 代碼介紹了 無參URL和有參URL。若是想傳遞參數,在「://」後面附加這些參數便可。
1 //// 用戶 按下 按鈕********* 請參考 ViewController.m 文件中的代碼 2 - (IBAction)Btn1Click:(id)sender { 3 NSLog(@"MyAppOne: You click the button1111."); 4 char szbuff[50] = {0}; 5 sprintf(szbuff, "%s", "AppDemo2://userName=heliang&pwd=20160812"); 6 /// 1.不帶參數的傳遞方式 7 // NSURL* urlLocal = [NSURL URLWithString:@"AppDemo2://"]; 8 /// 2.帶參數的傳遞方式 9 NSURL* urlLocal = [NSURL URLWithString:[NSString stringWithUTF8String:szbuff]]; 10 11 // 判斷是否能夠啓動該 url 12 if([[UIApplication sharedApplication] canOpenURL:urlLocal]) 13 { 14 [[UIApplication sharedApplication] openURL:urlLocal]; 15 NSLog(@"launch AppDemo2 success!"); 16 } 17 else 18 { 19 NSLog(@"No such url."); 20 /// 跳到 appStore 某個 app 21 NSURL* urlAppStore = [NSURL URLWithString:@"https://itunes.apple.com/cn/app/tie-lu12306/id564818797?mt=8"]; 22 [[UIApplication sharedApplication] openURL: urlAppStore]; 23 } 24 }
3.3至此,已經介紹完如何從一個app1啓動另外一個app2了。
步驟以下:
①app2在info.plist的URL Schemes中 註冊本身的URL
②app1在info.plist的【白名單】中添加 app2註冊的 URL
③app1中調用 [UIApplication sharedApplication] openURL:urlLocal]; 方法,啓動 app2。(能夠參考連接中的demo,進行進一步的理解。)
如何獲取傳遞這種啓動方式,傳遞過來的參數呢?
4.1在AppDelegate.m 中重寫 下面的這個application方法(若是文件中沒有這個函數,就手動添加下面的函數,這就是重寫)。傳遞過來的參數,就在 url中。(能夠參考連接中的demo,進行進一步的理解。)
4.2盡信書不如無書,本文也不是權威的講解。本文例子,僅供你們入門學習ios的這個知識點。更深層次的原理和應用,還須要你們慢慢琢磨了。當前,能在本身的工程中,實現這個功能,你就成功了。提早祝賀你成功!
1 ///////// 重寫的 application 方法******** 請參考 AppDelegate.m 文件中的代碼 2 -(bool)application:(UIApplication*)application openURL:(nonnull NSURL *)url options:(nonnull NSDictionary<NSString *,id> *)options 3 { 4 //// 打印 咱們收到的參數、以及應用程序的 applicationkey 5 NSLog(@"AppDemo1被啓動,下面是 AppDemo2傳遞過來的 啓動參數:"); 6 NSString* strUrl = [[NSString alloc] init]; 7 strUrl = url.absoluteString; 8 NSLog(@"strURL:%@", strUrl); 9 10 NSString* sourceApplication = options[UIApplicationOpenURLOptionsSourceApplicationKey]; 11 NSLog(@"sourceApplication:%@", sourceApplication); 12 return YES; 13 }
參考連接: