URL Scheme

  • URL Scheme是什么
  • URL Scheme有什么作用
  • URL Scheme怎么使用
URL Scheme是什么

  由于苹果的app都是在沙盒中,相互是不能访问数据的。但是苹果还是给出了一个可以在app之间跳转的方法:URL Scheme。简单的说,URL Scheme就是一个可以让app相互之间可以跳转的协议。每个app的URL Scheme都是不一样的,如果存在一样的URL Scheme,那么系统就会响应先安装那个app的URL Scheme,因为后安装的app的URL Scheme被覆盖掉了,是不能被调用的。

URL Scheme有什么作用

  那么app之间的跳转有什么作用呢?我们所使用的每一个app就相当于一个功能,app的跳转可以使得每个app就像一个功能组件一样,帮助我们完成需要做的事情,比如三方支付,搜索,导航,分享等等。

URL Scheme怎么使用

  要跳转到别人的app,就要知道别人的app的跳转协议是什么,需要传入什么参数,我们常见的跳转协议有下面这些:

    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文件中配置一下你的跳转协议即可,如下图所示:


跳转协议配置.jpg

  “emp601602://”就是我的跳转协议了,编译一下app,在safari中输入“emp601602:// ”就可以跳转到我的app中。

设置过程

要设置访问APP的URL Scheme,需要在info.plist中添加一个字段:`LSApplicationQueriesSchemes`,其值为由String组成的Array类型,每一个String代表一个URL Scheme。

系统Log提示

当URL Scheme没有设置成功时,使用canOpenURL或者openURL时,系统会打出Log:

`canOpenURL: failed for URL: "urlscheme://" - error: "This app is not allowed to query for scheme urlscheme"`

而当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

转载于:https://www.cnblogs.com/fendou0320/p/6527146.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值