因为苹果的app都是在沙盒中,相互是不能访问数据的。可是苹果仍是给出了一个能够在app之间跳转的方法:URL Scheme。简单的说,URL Scheme就是一个可让app相互之间能够跳转的协议。每一个app的URL Scheme都是不同的,若是存在同样的URL Scheme,那么系统就会响应先安装那个app的URL Scheme,由于后安装的app的URL Scheme被覆盖掉了,是不能被调用的。app
那么app之间的跳转有什么做用呢?咱们所使用的每个app就至关于一个功能,app的跳转可使得每一个app就像一个功能组件同样,帮助咱们完成须要作的事情,好比三方支付,搜索,导航,分享等等。ui
要跳转到别人的app,就要知作别人的app的跳转协议是什么,须要传入什么参数,咱们常见的跳转协议有下面这些:lua
1.打开Mail [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://info@icloud.com"]] 2.打开电话 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://18688886666"]]; 3.打开SMS [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:18688886666"]];
因此,若是咱们但愿别人打开咱们的app,只要在plist文件中配置一下你的跳转协议便可,以下图所示:url
“emp601602://”就是个人跳转协议了,编译一下app,在safari中输入“emp601602:// ”就能够跳转到个人app中。spa
设置过程代理
要设置访问APP的URL Scheme,须要在info.plist中添加一个字段:`LSApplicationQueriesSchemes`,其值为由String组成的Array类型,每个String表明一个URL Scheme。code
系统Log提示htm
当URL Scheme没有设置成功时,使用canOpenURL或者openURL时,系统会打出Log:blog
`canOpenURL: failed for URL: "urlscheme://" - error: "This app is not allowed to query for scheme urlscheme"`ip
而当URL设置成功,但没有找到相应的处理APP时,系统的Log是这样的:`canOpenURL: failed for URL: "urlscheme://" - error: "(null)"`
设置以后的代理方法实现:
“emp601602:// ”只能让用户跳转到咱们的app,以后的处理是在appDelegate的代理中,代理方法以下:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
在这个方法里,能够获取到触发这个方法的 URL,能够经过对这个 URL 进行判断,例如根据不一样的 Host,不一样的 Query String 来执行不一样的动做。
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { NSLog(@"%@", [url absoluteString]); // 在 host 等于 item.taobao.com 时,说明一个宝贝详情的 url, // 那么就使用本地的 TBItemDetailViewController 来显示 if ([[url host] isEqualToString:@"item.taobao.com"]) { // 这里只是简单地假设 url 形式为 taobao://item.taobao.com/item.htm?id=12345678 // 先获取要查看的宝贝详情的 itemId NSString *itemId = [[url query] substringFromIndex:[[url query] rangeOfString:@"id="].location+3]; // 使用本地 ViewController 来显示淘宝商品详情 TBItemDetailViewController *controller = [[TBItemDetailViewController alloc] initWithItemId:itemId]; [self.navigationController pushViewController:controller animated:YES]; [controller release]; } }
在你的动做执行完成了以后,有可能时须要返回到原有app的,这样就须要你的app跳转协议的url里面应该能传入调用者app的跳转协议,这样用户跳转到你的app完成动做后就能跳转回去了。
引用:http://www.jianshu.com/p/eed01a661186