🌐 通用方案 URL Scheme
学术派,了解什么是 URL Scheme
URL(Uniform Resource Locator)是指定在互联网上可以找到资源的位置的文本字符串
通常可以分成三个部分:方案(Scheme)、主机(host)、路径(path)
当应用程序得到一个 URL 时,通过对它的解析,就知道去哪个地方、什么位置获取资源,同时用哪种方式去处理这个资源
例如当浏览器处理 https://lleohao.github.io/archives/
这个 URL 时,它就会以 http
协议的方式去lleohao.github.io
这个域名所对应的主机下找寻 /archives/
位置的文档
互联网上的资源不仅仅指的是网页、图片、视频等文件,我们的 App 和 App 中的功能同样也可以视作一个资源
当 APP 在用户的设备上安装时,其可以在系统注册某个协议,如知乎所注册的就是 zhihu
用户访问 zhihu://articles/{id}
这个 URL 时就可以访问到知乎对应的文章页面
Web 页面如何调用 URL Scheme
URL Scheme
可以视作普通的 URL 链接,直接按照链接方式来使用
使用
a
标签1
<a href="zhihu://articles/296580539"></a>
设置
location.href
1
2
3function openApp() {
location.href = "zhihu://articles/296580539";
}使用
window.open
会怎样?🛑 不要使用
window.open
,IOS 可以正常的开启 App,Android 上可能无法冷启动 App (oppo 浏览器)
URL Scheme 的缺陷
打开 App 前会有二次确弹窗,体验不够流畅
无法判断拉端是否成功
已安装应用,弹出二次提示,但是无法获取用户最终点击了按钮
未安装应用
IOS 提示网址无效
Android 页面无任何反应
存在安全风险
由于 URL Scheme 的不唯一性,存在恶意的 App 伪造其它 App 的 URL Scheme,存在安全风险
总结来说,由于二次确认弹窗的存在,造成了体验的分割,不够流畅
其次是无法获取弹窗的响应状态(用户是否确认、取消)及未安装 App 状态,无法针对用户的响应作出对应的处理
👏 体验更好的方案
针对 URL Scheme 存在的问题,IOS (Universal Link)和 Android (Android Applink)都给出了对应的解决方案
为描述的方便,下文中的 Universal Link
指的是 IOS 下的 Universal Link
和 Android 下的 Android Applink
如何理解 Universal Link
简单来说,可以将 Universal Link
理解成被 App 注册的 https
链接
当 App 安装时,系统会去注册的 https
链接的域名下检查是否存在相关的验证的文件,如果存在,那么以后浏览器在处理该域名的下的链接时就会调用对应的 App 的做处理
Universal Link 优点
- 体验好:没有二次的弹窗提示,可以流畅的开启客户端;在没有安装 App 时,也可以向正常的链接一样工作,不影响用户的浏览
- 安全:需要在 App 上配置域名,且在安装后系统验证
Universal Link
需要验证对应域名下是否存在说明文件,保证只有该 App 的管理员才能做此操作 - 突破封锁:IOS 下 **
Universal Link
可以突破微信限制在其Webview
中拉端的限制;Android 未测试**
💯 实践案例
以知乎的首页的 “打开 APP” 的功能进行分析
IOS
由于 IOS 上对于的 Universal Link
的处理需要在跨域时才能生效(未跨域时按照正常的链接处理),所以知乎以 [https://oia.zhihu.com](https://oia.zhihu.com)
作为打开 App 的目标链接
Android
Android 上没有跨域的限制,可以访问主域名下的地址