iOS应用间通信:URL Schemes

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS应用间通信:URL Schemes相关的知识,希望对你有一定的参考价值。

参考技术A

URL用于定位资源,譬如网络资源。以下面的URL为例:

根据 RFC1808 标准,其包含如下组成部分:

ios中,你可以为自己的应用定义URL schemes,供外界调用。URL格式必须符合标准(即能够通过 NSURL 解析)。

总体来说,URL schemes可划分为两类:系统定义&自定义。

有些系统应用天生支持URL schemes,例如电话,邮件,短信,Safari,地图等。

更多关于系统定义的URL schemes的信息,详见官方文档 Apple URL Scheme Reference 。

调用URL scheme其实很简单,分为两步:

注意事项:

打开URL的方法如下:

自定义URL schemes也可以分为两步:

iOS以URL type为单位管理URL schemes。一个type下可以有多个scheme,但一个scheme只对应一个type。注册URL schemes,实际上是注册URL type。

在 Info.plist 中添加键值对 CFBundleURLTypes ,其对应一个数组,每个元素都是一个字典,代表一个type。例如:

一个URL type字典包含如下键值对:

更多关于CFBundleURLTypes的信息,详见Information Property List Key Reference中章节 CFBundleURLTypes 的叙述。

此外,还可以针对scheme定义启动图片。众所周知,app启动时会显示图片。如果app因为响应某个scheme而启动,可以根据scheme定义图片。图片命名格式如下:

更多关于URL scheme启动图片的信息,详见App Programming Guide for iOS中章节 Displaying a Custom Launch Image When a URL is Opened 的叙述。

收到调用请求后,相应的UIApplication代理方法会被调用,所以这里也是处理逻辑的所在:

注意事项:

被调用时,app可能处于下列状态之一:

D.2.2.1 app未运行时被调用

app先启动,再处理请求,但受到下面方法影响:

D.2.2.1 app运行中被调用

app 必定 会处理请求,进入前台(即方法 application:openURL:options: 一定会被调用);

UIApplication方法 canOpenURL: 可以判断当前设备上是否有能够响应特定URL的应用。

于是乎,有人利用这个方法过滤大量scheme,判断设备上安装了哪些应用。为防止滥用,自iOS9,Apple要求这个方法只能检测特定名单内的scheme(当然,系统定义的scheme不在此列),开发者需要通过键值对 LSApplicationQueriesSchemes 在 Info.plist 中定义这个名单。例如:

另外,还要注意:

更多关于LSApplicationQueriesSchemes的信息,详见Information Property List Key Reference中章节 LSApplicationQueriesSchemes 的叙述。

以上是关于iOS应用间通信:URL Schemes的主要内容,如果未能解决你的问题,请参考以下文章

应用在 iOS 中启动时是不是存在应用间通信?

ios应用间跳转

iOS应用间跳转详解

iOS url schemes应用

自定义 URL 方案错误:此应用不允许查询方案

iOS进程间通信之CFMessagePort