URL Scheme

URL Scheme就是一种协议URL,同我们常见的http、ftp一样,是一种资源定位符。scheme表示一个URL的最初始位置,即://之前的字符,比如ftp、http。

在iOS中,因为苹果的沙盒机制,应用只能访问它声明可能访问的资源。但苹果允许App之间通过URL Scheme来实现App之间的互相调起。URL Scheme也是App之间互相调起的唯一标识。

要跳转到某个app,就要知道这个app的跳转协议是什么,需要传入什么参数。比如:

1
2
3
4
5
6
//发邮件 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://zry@icloud.com"]];
//打电话
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://18688886666"]];
//发短信
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:18688886666"]];

在接入第三方支付、分享时,需要在URL Types里添加第三方平台的URL Scheme,比如

  • 微信:设置 Identifier:wexin URL Scheme:wx8483q485093(微信平台注册的AppID)
  • 支付宝: 设置Identifier:alipay URL Scheme:2017884575922(支付宝平台注册的AppID)

iOS的App也可以注册自己的URL Scheme:在URL Types中添加自定义的URL scheme作为URL Identifier,一般采用反转域名的方法保证该名字的唯一性。

示例:

在URL Types里添加标识自己App的URL Scheme为 Identifier:com.zry.baylee URL Scheme:zrydemo1209

编译项目后,在Safari中键入zrydemo1209://就可以打开自己的App了。

“zrydemo1209:// ”只能让用户跳转到我的app,之后的处理是在appDelegate的代理中,代理方法如下:

1
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

在这个方法里,可以获取到触发这个方法的 URL,可以通过对这个 URL 进行判断,例如根据host执行不同的动作。在你的动作执行完成了之后,有可能时需要返回到原有app的,这样就需要在app跳转协议的url里面传入调用者app的跳转协议,这样用户跳转到你的app完成动作后就能跳转回去了。