使用openURL实现程序间带参数跳转详解
实现的效果:有两款应用A与B,A打开B
A --> B
1. 新建工程B,bundle ID为com.YouXianMing.B
建立一个URL
这么填写(与前面bundle ID类似的写法):
2. 新建工程A,bundle ID随便起,为简单起见,写下如下代码
NSURL *url = [NSURL URLWithString:@"B://com.YouXianMing"]; if ([[UIApplication sharedApplication] canOpenURL:url]) { NSLog(@"跳转并打开"); [[UIApplication sharedApplication] openURL:url]; } else { NSLog(@"打开失败"); }
先执行B(安装应用B),在执行应用A,你会发现可以正常从A应用跳转到B应用了.
很简单吧!
我们再来实现可以传递参数的
实现的效果:有两款应用A与B,A打开B,并传递一些参数
参数
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. 可以传递字符串的参数