iOS应用唤起和定制URL Scheme

做移动客户端开发也有一段时间了,应用唤起和应用跳转是很常见的应用场景。本人对URL Scheme的自定义相关的内容也有了一个比较粗略的了解,本文做一个简要整理。

我们在使用手机App的时候回经常看到,一个应用A就像嵌入了另外一个应用B的链接一样,在A中做类似点击入口操作的时候,唤起另外一个应用B到前台运行。实际上,在这个过程中是手机操作系统做了对URL Scheme的支持。

现在主流的iOS和Android都支持内置URL Scheme的应用跳转,如在浏览器中输入tel://15200000000,确认后会唤起内置的拨号。应用开发者也可以自定义特定的URL Scheme以接受跳转消息。

0. 应用

iOS URL Scheme可以认为是iOS不同沙盒间应用的一种通信方式。应用URL Scheme实现跳转的例子非常多,使用很广泛。除了上面提到的应用唤起和切换外,还比如如下3个例子:

  • 浏览器中H5页面到native应用的跳转
  • 类似天猫应用中的店铺收藏快捷方式
  • SSO单点登录实现等

1. 实现

iOS Scheme定制实现也相对简单。对于被调用方应用,需要做两件事:

  • 注册应用可以接收的URL Scheme
  • 代码实现接收到URL后的跳转逻辑

先找到应用对应的Info.plist文件,或者直接在Xcode工程文件中的Info页签下找到Url types,增加对应的名称和配置url scheme。

代码实现上,在Application对应的delegate类中增加如下方法实现:

对于调用方,如果是代码实现,只需这么做就可以:


NSURL *url = [NSURL URLWithString:@"abcdefg://aaaaa.bbbbb"];
[[UIApplication sharedApplication] openURL:url];

或者直接在浏览器里面使用。

2. 其它

在iOS系统中,已经内置了很多系统级的scheme,如http, mailto, tel, sms等,详见后面给出的参考链接Apple URL Scheme Reference

从安全上考虑,对于接到消息的应用需要对URL做一定处理和判断,避免来自动机不纯的操作的安全问题发生。使用了URL Scheme的调用者也应该注意不要在URL中传递比较敏感的信息。

通过上面描述,还有一个问题就是URL Scheme可能发生重复冲突,多个应用都使用了同样的URL Scheme。关于这点,技术论坛上给出的结论是系统级优于第三方定制的URL Scheme,第三方之间不保证顺序。本人的揣测是,注册同样URL Scheme的应用,后安装的应用会生效。

3. 参考

iOS Application Programming Guide: Implementing Custom URL Schemes

Apple URL Scheme Reference

个人原创小结,欢迎各位评论,如有问题还请指正。

相关文章:

此条目发表在 iOS, iOS开发基础, 开发, 计算机技术 分类目录,贴了 , , , , , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>