Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【bigo】谈谈URL Scheme #72

Open
JackyChen1996 opened this issue Oct 8, 2021 · 0 comments
Open

【bigo】谈谈URL Scheme #72

JackyChen1996 opened this issue Oct 8, 2021 · 0 comments

Comments

@JackyChen1996
Copy link

JackyChen1996 commented Oct 8, 2021

前言

作为web前端开发,https://xxx 我们屡见不鲜。点击按钮打开我们APP指定页面,如果手机未装有该APP则引导用户去应用市场下载这样的功能需求又很常见,什么是URL Scheme, 它和我们http页面链接有什么区别?什么是deeplink?我们应如何通过deeplink跳转APP指定页面?

avatar

URL Scheme是什么

URL scheme是App提供给外部的可以直接操作App的规则,有很多应用都提供了URL scheme,方便在网页端打开自己的App,APP可以向手机操作系统注册一个 URL scheme,该 scheme 用于从浏览器或其他应用中启动本应用
URL Schemes由两个单词组成:

  • URL,我们都很清楚,例如https://xxx/ 就是个 URL,我们也叫它链接或网址;
  • Schemes,表示的是一个 URL 中的一个位置——最初始的位置,即 ://之前的那段字符。比如 https://xxx/ 这个网址的 Schemes 是 https。

avatar

在以本地应用为主的 移动端上,我们可以像定位一个网页一样,用一种特殊的 URL 来定位一个应用甚至应用里某个具体的功能。而定位这个应用的,就是这个应用的 URL 的 Schemes 部分,也就是开头那部分。比如短信,就是 sms://。

区别:

  • 所有网页都一定有网址,不管是首页还是子页。但未必所有的应用都有自己的 URL Schemes,更不是每个应用的每个功能都有相应的 URL Schemes
  • 一个网址只对应一个网页,但并非每个 URL Scheme 都只对应一款应用。

URL Scheme拼接规则

一般来说整段的URL Scheme是这种的形式:Scheme://host:port/path?query=xxxxxxx。其中path代表了想要跳转的指定页面,而query代表了想要传递的参数,host和port可以省略,所以通常也写为Scheme://path?query=xxxx这种形式。Scheme没有明确的规范,由APP开发人员自己定义APP对应Scheme。

按照功能划分分为以下几种:

  • 基础 URL Schemes:用于启动应用,比如:scheme://;
  • 复杂 URL Schemes:用于直接打开应用的具体页面,比如:scheme://path;
  • 变形 URL Schemes:包含页面所需要的必须参数,比如:scheme://path?query1=xx&query2=xx

用途

  1. 应用A跳转到应用B
    在应用A中访问应用B的URL Scheme,系统会打开注册过该Scheme的应用B,例如可以直接在自己APP内访问短信Scheme:sms://就可以拉起短信

  2. Web通过指定URL Scheme打开应用
    原生app注册Scheme,例如scheme://,浏览器访问该URL Scheme时,系统进行判断,如果该Scheme已注册过,并且已安装该应用则会弹窗提示是否打开该应用,点击确认则打开应用。若无安装则提示无效。(注:safari浏览器支持URL Scheme跳转,android系统部分浏览器只支持系统级应用短信、电话等跳转,不支持自己APP自定义URL Scheme跳转)

  3. 使用JS Bridge完成Web端和移动端之间的通信
    Web 端通过某种方式(例如 iframe.src)发送 URL Scheme 请求,之后 Native端 拦截到请求并根据 URL Scheme(包括路径以及Scheme所带的参数)进行相关操作完成web端与native端的通信。

  4. Service Work
    使用Service Work来进行充当一个服务器与浏览器之间的中间人角色,如果网站中注册了service worker那么它可以拦截当前网站所有的请求包括对不同的URL Scheme进行对应的处理,如果需要向服务器发起请求的就转给服务器,如果可以直接使用缓存的就直接返回缓存不再转给服务器。如果是自定义URL Scheme可以交给系统进行处理

移动端如何注册URL Schemes

Android

 <intent-filter> <!--URL Scheme启动-->
        <!--必有项-->
        <action android:name="android.intent.action.VIEW"/>
        <!--如果希望该应用可以通过浏览器的连接启动,则添加该项-->
        <category android:name="android.intent.category.BROWSABLE"/>
        <!--表示该页面可以被隐式调用,必须加上该项-->
        <category android:name="android.intent.category.DEFAULT"/>
        <!--协议部分-->
        <data android:scheme="urlscheme"
            android:host="auth_activity">
 </intent-filter> 

IOS

每个应用都有一个或多个plist文件,即info.plist,在这个苹果自带配置文件中增加相关key-value。

第一步:添加URL types
第二步:展开URL types,第1个元素(即item 0)下方添加URL Schemes
第三步:展开URL Schemes,第1个元素(即item 0)修改value为自定义的字符串,例如hytest

DeepLink

Deeplink,又叫深度链接技术,是指在App/短信/广告里点击链接,能直接跳转到目标App具体位置的技术,深度链接打破了网站与App间的壁垒,成为实现网站与App相互跳转的桥梁。开发者不仅可以通过deeplink实现网站到App互相跳转,也可以实现从多个平台(QQ、微信、微博、Twitter、Facebook、短信、各大浏览器等)到App内指定页的跳转

  1. URL Scheme开发比较简单,但是也存在明显的缺点
  • 我们只能通过固定协议格式的链接来实现跳转,而且打开H5页面时,会出现一个提示框:“是否打开XXX”。用户确认了才会跳转到App中,增加了用户流程
  • 微信、QQ等把URL Scheme 打开App这种方式给禁了,但是它们都各自维护着一个白名单,如果Scheme不在该白名单内,那么就不能在他们的App内打开这个App(如果被封锁了那么用户只能通过右上角浏览器内打开App)
  1. Universal link——iOS 9以后
    iOS9及以上的用户可以通过点击一个https 链接无缝的跳转到一个App应用内的指定页面,不需要让用户点击“是否打开xx”。因为少了这个提示框,所以Universal link比URL Scheme方式体验更好。并且若用户没有安装该应用,则由于是HTTP链接用户也可以直接访问对应网页的内容。并且跟URL Scheme相比,Universal Link具有唯一性。因此更推荐开发者在iOS端使用这种方式打开App。官方开发文档

  2. App Link——Andriod M(6)以后
    App Link是由安卓发布的,在Andriod M以后才能使用。用户可以点击一个H5链接时直接跳转到 App 指定页面,而不会让用户点击”是否打开xx“。并且如果用户未安装APP则会直接跳转到指定的网站而不会出现404错误。所以App Link比URL Scheme方式体验更好。并且APP Link可以链接到自己网站的HTTP链接,其他应用均无法使用该链接,保证了应用链接的唯一以及安全。官方开发文档

  3. 第三方工具

结语

URL Schem和我们的web日常开发息息相关,了解清楚URL Scheme并且合理利用第三方工具生成deeplink不仅可以实现场景快速还原,缩短用户使用路径,更重要的是能够用于App拉新推广场景,降低我们APP用户流失率。

@JackyChen1996 JackyChen1996 changed the title 【BIGO】谈谈URL Schemes 【bigo】谈谈URL Scheme Oct 9, 2021
@JackyChen1996 JackyChen1996 reopened this Oct 18, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant