實現的效果:有兩款應用A與B,A打開Bphp
A --> Bapp
1. 新建工程B,bundle ID爲com.YouXianMing.Bide
創建一個URLurl
這麼填寫(與前面bundle ID相似的寫法):spa
2. 新建工程A,bundle ID隨便起,爲簡單起見,寫下以下代碼code
NSURL *url = [NSURL URLWithString:@"B://com.YouXianMing"]; if ([[UIApplication sharedApplication] canOpenURL:url]) { NSLog(@"跳轉並打開"); [[UIApplication sharedApplication] openURL:url]; } else { NSLog(@"打開失敗"); }
先執行B(安裝應用B),在執行應用A,你會發現能夠正常從A應用跳轉到B應用了.component
很簡單吧!orm
咱們再來實現能夠傳遞參數的字符串
實現的效果:有兩款應用A與B,A打開B,並傳遞一些參數get
參數
A -----> B
1. A中代碼這麼寫
// 其餘應用的 URL Schemes --> B // 其餘應用的 Identifier --> com.YouXianMing // values? --> 要傳遞的參數,方便解析 NSURL *url = [NSURL URLWithString:\ @"B://com.YouXianMing/values?username=WT&password=123456&callback=invoking"]; if ([[UIApplication sharedApplication] canOpenURL:url]) { NSLog(@"跳轉並打開"); [[UIApplication sharedApplication] openURL:url]; } else { NSLog(@"打開失敗"); }
2. 在B應用中請添加以下方法到AppDelegate.m中
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { if ([[url scheme] isEqualToString:@"B"]) { if ([[url host] isEqualToString:@"com.YouXianMing"]) { /* query用法 The query string from the URL. If the receiver does not conform to RFC 1808, returns nil. For example, in the URL http://www.example.com/index.php?key1=value1&key2=value2, the query string is key1=value1&key2=value2. */ NSString *query = [url query]; // 分割& NSArray *array = [query componentsSeparatedByString:@"&"]; // 顯示數據 NSLog(@"%@", array); } return YES; } return NO; }
3. 執行A程序後,注意觀察B程序的打印信息:
2014-04-21 13:06:00.277 B[1683:60b] (
"username=WT",
"password=123456",
"callback=invoking"
)
實現的效果:有兩款應用A與B,A打開B並傳參數,B打開A並傳參數
太簡單了,略.
小結:
1. 若是A應用想被B應用打開,須要在A應用中設置URL,在設置中須要設置URL identifier 以及 URL Schemes,做爲這個應用的標示
2. A既要打開B,B也可以打開A,那就須要AB兩款應用都設置URL了
3. 能夠傳遞字符串的參數