实现的效果:有两款应用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. 能够传递字符串的参数