Deeplink应用描述

Deeplink,简单讲,就是你在手机上点击一个链接之后,可以直接链接到app内部的某个页面,而不是app正常打开时显示的首页。不似web,一个链接就可以直接打开web的内页,app的内页打开,必须用到deeplink技术。

想要在h5页面中唤起app的某个页面也要用到该技术,两个App之间完成横向调用也是通过该技术

假如要从APP-F调用APP-T

1)APP-T要进行自定义scheme的配置(iOS是info文件,Android是activity),并进行参数处理的coding。

2)APP-F进行调用,首先判断设备是否安装APP-T。

3)如果未安装,则跳转到APP-T的web版应用(假设他提供web版)或者是跳转到AppStore等应用市场进行下载。

4)如果已安装,则调用APP-T配置好的URL SCHEME,直接打开APP-T的相关界面。

核心技术

URL SCHEMES简介

核心的技术就是:URL SCHEMES,不论是IOS还是Android。

URL Schemes 有两个单词:

  • URL,我们都很清楚,http://www.apple.com 就是个 URL,也叫它链接或网址;

  • Schemes,表示的是一个 URL 中的一个位置——最初始的位置,即 ://之前的那段字符。比如 http://www.apple.com 这个网址的 Schemes 是 http。

就像给服务器资源分配一个 URL,以便我们去访问它一样,我们同样也可以给手机APP分配一个特殊格式的 URL,用来访问这个APP或者这个APP中的某个功能(来实现通信)。

APP得有一个标识,好让我们可以定位到它,它就是 URL 的Scheme 部分。

URL Scheme 语法

URL SCHEMES值

我们可以像定位一个网页一样,用一种特殊的 URL 来定位一个应用甚至应用里某个具体的功能。而定位这个应用的,就应该这个应用的 URL 的 Schemes 部分,也就是开头儿那部分。

不唯一性

但是需要注意的是应用的URL Schemes 并不唯一,也就是说一个应用可以“起多个名“,不同应用的URL Schemes也可能因为名字一样发生冲突。

固定性

iOS系统级应用,有一些已经定义了URL Schemes,比如短信是 sms:、通话是tel:、iBooks是ibooks:,在定义自己APP的URL Schemes的时候要避免跟系统应用名称一样。

传参

与URL一样,URL Schemes也可以通过传参打开特定的APP界面。

URL:http://images.google.com/images?q=关键字

URL Schemes:weixin://dl/moments(打开微信朋友圈)

Scheme 链接痛点

在 ios 上会有确认弹窗提示用户是否打开,对于用户来说唤端,多出了一步操作。若用户未安装 APP ,也会有一个提示窗,告知我们 “打不开该网页,因为网址无效”

传统 Scheme 跳转无法得知唤端是否成功,Universal Link 唤端失败可以直接打开此链接对应的页面

Scheme 在微信、微博、QQ浏览器、手百中都已经被禁止使用,使用 Universal Link 可以避开它们的屏蔽( 截止到 18年8月21日,微信和QQ浏览器已经禁止了 Universal Link,其他主流APP未发现有禁止 )

如何调用三种唤端媒介

URL Scheme 还是URL ,只是 URL Scheme算是特殊的 URL。所以我们可以拿使用 URL 的方法来使用它们。

iframe

<iframe src="sinaweibo://qrcode">

在只有 URL Scheme 的日子里,iframe 是使用最多的了。因为在未安装 app 的情况下,不会去跳转错误页面。但是 iframe 在各个系统以及各个应用中的兼容问题还是挺多的,不能全部使用 URL Scheme。

a 标签

<a href="intent://scan/#Intent;scheme=zxing;package=com.google.zxing.client.android;end"">扫一扫</a>

使用过程中,对于动态生成的 a 标签,使用 dispatch 来模拟触发点击事件,发现很多种 event 传递过去都无效;使用 click() 来模拟触发,部分场景下存在这样的情况,第一次点击过后,回到原先页面,再次点击,点击位置和页面

所识别位置有不小的偏移,所以 Intent 协议从 a 标签换成了 window.location。

window.location

URL Scheme 在 ios 9+ 上诸如 safari、UC、QQ浏览器中, iframe 均无法成功唤起 APP,只能通过 window.location 才能成功唤端。当然,如果我们的 app 支持 Universal Link,ios 9+ 就用不到 URL Scheme 了。而 Universal Link

在使用过程中,我发现在 qq 中,无论是 iframe 导航 还是 a 标签打开 又或者 window.location 都无法成功唤端,一开始我以为是 qq 和微信一样禁止了 Universal Link 唤端的功能,其实不然,百般试验下,通过 top.location 唤端成功

了。

总结

APP要想被其他APP直接打开,自身得支持,让自己具备被人打开的能力。(URL Schemes)

APP要想打开其他的APP,自身也得支持。(判断设备是否安装、各种跳转的处理)

Deeplink从宏观角度,需要有业界统一标准与规范,才有可能形成一定的气候。

在统一的标准下,只有当APP接入到一定的量级,形成一个生态,我们畅想的那种APP间无缝衔接的场景才会真正实现。

一些常用APP的URL Schemes

知乎

回答 zhihu://answers/{id} 用户页 zhihu://people/{id}

微信

weixin://dl/scan 扫一扫 weixin://dl/feedback 反馈 weixin://dl/moments 朋友圈 weixin://dl/settings 设置 weixin://dl/notifications 消息通知设置 weixin://dl/chat 聊天设置 weixin://dl/general 通用设置 weixin://dl/officialaccounts 公众号 weixin://dl/games 游戏 weixin://dl/help 帮助 weixin://dl/feedback 反馈 weixin://dl/profile 个人信息 weixin://dl/features 功能插件

腾讯微博:TencentWeibo://

淘宝:taobao://

支付宝:alipay://

微博:sinaweibo://

weico微博:weico://

QQ浏览器:mqqbrowser://

uc浏览器:ucbrowser://

海豚浏览器:dolphin://

搜狗浏览器:SogouMSE://

百度地图:baidumap://

Chrome:googlechrome://

优酷:youku://

京东:openapp.jdmobile://

人人:renren://

美团:imeituan://

1号店:wccbyihaodian://

我查查:wcc://

有道词典:ddictproapp://

点评:dianping://

微盘:sinavdisk://

豆瓣fm:doubanradio://

网易公开课:ntesopen://

名片全能王:camcard://

淘宝宝贝搜索:taobao://http://s.taobao.com/?q=[prompt]

淘宝店铺搜索:taobao://http://shopsearch.t

参考

【基础知识】现在很火的app上的deeplink技术,到底是什么?

通过H5(浏览器/WebView/其他)唤起本地app

H5唤起APP指南(附开源唤端库)

客户端相关知识学习(六)之deeplink技术的更多相关文章

  1. 客户端相关知识学习(十二)之iOS H5交互Webview实现localStorage数据存储

    前言 最近有一个需求是和在app中前端本地存储相关的,所以恶补了一下相关知识 webView开启支持H5 LocalStorage存储 有些时候我们发现写的本地存储没有起作用,那是因为默认WebVie ...

  2. 客户端相关知识学习(十一)之Android H5交互Webview实现localStorage数据存储

    前言 最近有一个需求是和在app中前端本地存储相关的,所以恶补了一下相关知识 webView开启支持H5 LocalStorage存储 有些时候我们发现写的本地存储没有起作用,那是因为默认WebVie ...

  3. 客户端相关知识学习(十)之app给h5传递数据

    方法一: app可以把参数传到h5的链接里,用类似?xx=xx&xx=xx的形式拼接,js解析参数即可. 方法二: 情况一:app调用h5 原生app都可以对js的function进行触发,前 ...

  4. 客户端相关知识学习(九)之h5给app传递数据

    方法一: 情况一: if (window.JdAndroid){          window.JdAndroid.setPayCompleted();          window.JdAndr ...

  5. 客户端相关知识学习(八)之Android“.9.png”

    参考 Android中.9图片的含义及制作教程 .9.png Android .9.png 的介绍

  6. 客户端相关知识学习(五)之什么是webView

    webview是什么?作用是什么?和浏览器有什么关系? Android系统中内置了一款高性能 webkit 内核浏览器,在 SDK 中封装为一个叫做 WebView 组件也就是说WebView是一个基 ...

  7. 客户端相关知识学习(四)之H5页面如何嵌套到APP中

    Android原生如何渲染H5页面 Android与 H5 的交互方式大概有以下 1 种: 利用WebView进行交互(系统API) iOS原生如何渲染H5页面 iOS 与 H5 的交互方式大概有以下 ...

  8. 客户端相关知识学习(三)之Android原生与H5交互的实现

    Android原生与H5交互的实现 H5调用原生的方式 方式可能有多种,根据开发经验,接触过两种方式. 方法一:Android向H5注入全局js对象,也就是H5调Android 1.首先对WebVie ...

  9. 客户端相关知识学习(二)之h5与原生app交互的原理

    前言 现在移动端 web 应用,很多时候都需要与原生 app 进行交互.沟通(运行在 webview中),比如微信的 jssdk,通过 window.wx 对象调用一些原生 app 的功能.所以,这次 ...

随机推荐

  1. RunHelper,一个为跑步而设计的开源的android app

    RunHelper是一个为跑步而设计的android应用,意在为爱跑步的人提供一个简洁.实用.免费的工具. 我自己也经常跑步,也用过像Nike running.runkeeper之类的app:Nike ...

  2. ansible-playbook的YAML语法学习

    YAML:可以将你打算对多机器的批量操作放到一个文件中,顺序执行,可以根据机器做到根据机器信息判断执行,其他命令执行结果判断执行. YAML有着严格的层级要求,稍微有个缩进问题就会无法运行,所以学习过 ...

  3. Twisted框架学习

    Twisted是用Python实现的基于事件驱动的网络引擎框架,是python中一个强大的异步IO库.理解twisted的一个前提是弄清楚twisted中几个核心的概念: reactor, Proto ...

  4. 小D课堂 - 新版本微服务springcloud+Docker教程_4-01 常用的服务间调用方式讲解

    笔记 第四章 服务消费者ribbon和feign实战和注册中心高可用 1.常用的服务间调用方式讲解     简介:讲解常用的服务间的调用方式 RPC:             远程过程调用,像调用本地 ...

  5. spark学习中一些小问题---1

    1.linux文件查找命令.这个很关键 find / -name employees.json 2.hdfs命令上传整个文件夹或文件 hadoop dfs -put /home/root/apache ...

  6. Lucence简单学习---1

    package cn.itheima.lucene; import java.io.File; import java.util.ArrayList; import java.util.List; i ...

  7. RxJS 6有哪些新变化?

    我们的前端工程由Angular4升级到Angular6,rxjs也要升级到rxjs6.  rxjs6的语法做了很大的改动,幸亏引入了rxjs-compact包,否则升级工作会无法按时完成. 按照官方的 ...

  8. Java集合(3):使用Abstract类

    每个java.util容器都有其自己的Abstract类,它们提供了该容器接口的部分实现.下面是一个定制自己的Map的例子(List set就省略了): 定制自己的Map实现AbstractMap-- ...

  9. JavaScript基本入门02

    目录 JavaScript基础入门 02 条件语句 if 语句 if .. else 语句 switch 结构 循环语句 while 循环 continue 关键字 do...while语句 for ...

  10. vue弹窗后如何禁止滚动条滚动?

    原文地址 常见场景 在许多填写表单的页面中,都会弹出一个选择器,让你在弹窗中选择项目.有时,弹窗本身容纳不下内容,需要让它不断滚动来展示,但因为事件是冒泡的,有时就会造成底部(body 的Z-inde ...