一.简介苹果的沙盒机制
一般来说,我们使用的智能设备上有许多我们的个人信息。比如:联系方式、银行卡/信用卡信息、支付宝/Paypal/各大商城的账户密码、照片甚至行程与位置信息等等。
如果说,你设备上的每一个应用,不管是官方的还是你从任何商城安装的应用都可以随意地获取这些信息,那么你轻则收到骚扰信息和邮件、重则后果不堪设想。如何让这些信息不被其它应用随意使用,或者说,如何让这些信息仅在设备所有者本人知情并允许的情况下被使用,是所有智能设备与操作系统所要在乎的核心安全问题。
在 iOS 这个操作系统中,针对这个问题,苹果使用了名为「沙盒」的机制:应用只能访问它声明可能访问的资源。一切提交到 App Store 的应用都必须遵守这个机制。
苹果选择沙盒来保障用户的隐私和安全,但沙盒也阻碍了应用间合理的信息共享,于是有了 URL Schemes 这个解决办法。
二.简介URL Scheme
1.URL Scheme是什么?
通过对比网页链接来理解 iOS 上的 URL Scheme,应该就容易多了。
URL Scheme 有两个单词:
URL,我们都很清楚,例如 http://www.apple.com 就是个 URL,我们也叫它链接或网址;
Scheme,表示的是一个 URL 中的一个位置——最初始的位置,即 ://之前的那段字符。比如 http://www.apple.com 这个网址的 Scheme 是 http。
根据我们上面对 URL Scheme 的使用,我们可以很轻易地理解,在以本地应用为主的 iOS 上,我们可以像定位一个网页一样,用一种特殊的 URL 来定位一个应用甚至应用里某个具体的功能。而定位这个应用的,就应该这个应用的 URL 的 Scheme 部分,也就是开头那部分。比如短信,就是 sms:
2.如何配置URL Scheme?
项目中需要配置 URL Scheme 以用于场景恢复时跳转到应用中(这里的scheme要唯一确定,不要与其他应用一致,建议使用项目名称作为scheme,不然有可能会跳转到其他的应用里)。
在iOS工程中选择工程 Target,选择 Info 选项,然后打开 URL Types,添加 URL Scheme。可以自定义协议名称,如moblink。这个形式的 URI 就会关联跳转到工程中。
三.简介Universal Link
1.Universal Link 是什么?
Universal Link 是 Apple 在 WWDC 2015 上为 iOS 9 引入的一个新功能,是通过传统HTTP链接来启动App的新技术。可以使用相同的网址打开网站和App。
通过唯一的网址,就可以链接到App中具体的视图,不需要特殊的Scheme。如果用户没有安装App则链接到对应的普通网页。
2.如何配置 Universal Link ?
在苹果开发者网站中打开需要使用 Universal Link 功能的App中的Associated Domains开关
然后上传一个名为 “apple-app-site-association” 的文件到服务器根目录下,该文件内容格式如下:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "9JA89QQLNQ.com.apple.wwdc",
"paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
},
{
"appID": "ABCD1234.com.apple.wwdc",
"paths": [ "*" ]
}
]
}
}
其中 “appID” 是由开发者的 TeamID 和App的 BundleID 拼接而成,“paths” 数组可用来指定该URL下的哪些路径被注册成为Universal Link。相关详细说明请参考:Support Universal Links
最后在AppDelegate中实现相应的代理方法即可。
四.URL Scheme和Universal Link区别
在 iOS 9 以前,我们从外部启动App都是通过URL Scheme实现跳转的。这种方式虽然可自定义程度很高,能够巧妙地实现很多跳转,但弊端也很明显:我们只能通过 scheme://example 这种格式的链接来实现跳转,而且现在苹果还对这种方式的跳转加了一个提示框:“是否打开XXX”。对于对Web和原生App交互的场景需求量很大的产品来说,这样的跳转方式显然是步骤冗杂的,用户体验并不好。
iOS 9 以后,Universal Link 的出现完美的解决了这个问题。它所提供的直接、顺畅、无缝衔接的跳转能够让用户体验提升一个很大的级别。用户可以点击开发者指定的类似于 https://example.com/t 的URL直接唤醒App,而不需要在浏览器打开再点击其他按钮,实现真正意义上的一键直达,无缝链接。