Android Deeplink探究

移动端深度链接,简称deeplink。这是一种通过uri链接到app特定位置的一种跳转技术,不单是简单地通过网页、app等打开目标app,还能达到利用传递标识跳转至不同页面的效果。参考Create Deep Links to App Content

场景

在推广、广告、应用间跳转的场景下,使用极多。这里将根据以下要点来介绍deeplink。

  1. intent
  2. intent-filter
  3. scheme

原理介绍

  • intent

首先我们要讲一下的是intent,在android中,intent作为“调用意图”来解释再合适不过了,其作用不用多说,就是为调用其他app所做的封装,这里就简单说一下。intent的调用有显式和隐式两种方式。

显式调用就好比你去别人家做客,显式调用类似于你知道朋友家的地址,浙江省杭州市西湖区某某小区几栋几零几,人家门牌都写的很清楚,你去找就很容易,指向性唯一。

隐式调用包含一定的条件,有action,category,data,type,extras,flags等等,每一种属性都类似于筛选条件。你说你要去杭州的山上玩,那么就会给你定位到杭州市的各种山,只要符合这个条件,他们都会一一被列出来,至于去哪里,就看你自己选。

  • intent-filter

intent-filter是针对你跳转的目标来讲的,就类似于门牌的修饰,他会在门牌上定义上述介绍的那些属性。当有intent发送过来的时候,就会筛选出符合条件的app来。最常见的就是



这俩属性可以说AndroidManifest.xml最常见的两行代码了,作用就是app第一个启动的activity。一个app里有很多activity,在启动的时候,系统并不知道哪个是第一个要启动的,那么他就发一个setAction为“android.intent.action.MAIN”、setCategory为“android.intent.category.LAUNCHER”的intent出来,被匹配的到Activity就会启动了。

  • Android Deeplink探究

deeplink所需要的几个属性大致有以下几个







这边一个个介绍过去,action.VIEW是打开一个视图,category.DEFAULT为默认,category.DEFAULT为设置该组件可以使用浏览器启动,这个是关键,从浏览器跳转,就要通过这个属性。data中的scheme、host、pathPrefix等等,这个是uri的链接,scheme可以导向app的跳转,是另一个关键。

接下来就是生成一个短链,通过浏览器打开就行了。比如”xt://www.abc.com/work“,这里要注意的是,uri也是层级过滤的,例如有两个activity同时声明了scheme为“xt”,那么会继续往下匹配host。

好了,deeplink的原理及使用,就基本讲完了。

拓展

由于推广等场景的使用,许多都是由网页打开,针对一些未安装的用户进行跳转的。整个流程要求用户先去应用市场下载,下载完后再打开跳转。普通的deeplink实现方案已经不能满足,进而演化出一种延迟深度链接

目前市场上流行的解决方案很多,类似魔窗,google的firebase dynamic-link,branch,facebook的app-links等等(我是不是要收一波广告费txtx)。翻看了一下源码及实现,大致是通过访问定向链接的时候(这个和短链不一样,短链是针对本地app的,长链是可以真正访问的http网页),会上传设备、ip、时间戳等信息,在app启动的时候,再去异步向他们服务器请求短链。也有和应用市场合作,先把信息传递给应用市场,在市场中打开也可以定向跳转。ps:iOS中的实现好像是访问浏览器中的cookie。

方案很多,各有优缺点,目前来看均可尝试,结合各平台的资源去实现。

总结

deeplink的使用大致就上述内容,还有深层次的内容,像是scheme协议等,有空深究了再做分享。

备注

你可能感兴趣的:(android)