Google的deepLink和appLink

此篇文章主要做科普,理解deepLink和appLink主要干了什么。

引言

  • deep link技术出现的背景,一言以蔽之,信息交流。native app是C/S架构,彼此之间是信息孤岛,用户无法自然地切换使用场景,不能完成打了车之后然后直接搜索周围饭店这种场景,只能打开滴滴,然后再打开大众点评。
  • 参考web,巨头们引进了deep link技术,也就是说,还是以一个http连接来标识一个app,通过http url来泛化app之间信息沟通的途径。
  • 各大巨头公司对deeplink技术有不同的实现,比如google的app link,苹果的universal link等。所以这也是deeplink难以普及的原因,没有一个类似w3c的机构来统一做这个事

Deeplink

  • deepLink 现在随处可见,它描述地是点击浏览器的一个链接,能够跳转到app的技术。我们在浏览器里或者短信里点击一个链接之后,经常会唤起一个dialog,询问我们用什么来处理这个链接,我们可以选择对应的app,这个就是deeplink技术。但是这个体验不太好的地方是,每次都要弹出一个对话框让用户选择,体感不够沉浸,如果要不弹出对话框只能用户自己选择,两种方法,一种是在第一次对话框选择的时候选择always,第二种是在setting里面设置。
  • android要支持deeplink,是基于framework的intent。如下所示,向系统申明自己可以处理http://www.android.com或者https://www.android.com的url

    
        
        
        
        
        
        
    

然后如果有多个app申明了可以处理,系统就会打开一个对话框让用户选择。
要使用这个intent,可以用代码创建这么一个intent,然后发射出去。我以为浏览器的行为这是这样。

App Link

  • App Link是Android系统6.0之后支持的能力,我们可以认为app link是deeplink的增强版。它提供了让系统verify一个app来默认处理某类链接的能力,一旦verify之后,系统处理这类链接就不会弹出对话框,会直接唤起对应对话框。
  1. 要求如下:
    a) App 开发者使用AppLinks(Android 6.0系统)

         b)在App Manifest中声明App Links,打开Intent Filter
    
        c)在HOST服务器创建statements.json配置,包含打开包名和数字签名
    
  2. 可以看一下intentfilter和json的对应关系, json文件需要放在网站的.well-known/里面。

https://www.example.com/.well-known/assetlinks.json

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example",
    "sha256_cert_fingerprints":
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
}]

  
    
      
      
      
      
      
    
  

  • 在json里面主要是要申明默认处理app的package name和下面的 SHA256编码的app指纹。用下面的命令可以生成
 $ keytool -list -v -keystore my-release-key.keystore

注意的点

  • 还有一个要注意的点是:
  • 要在manifest里面开启android:autoVerify = true。
  • 开启了之后,系统会尝试verify你在manifest里面申明的所有app links pattern,只要有一个不通过,这次verify就失败了,它申明的所有的app links都无效。

参考 移动DeepLink的前生今世
https://developer.android.com/training/app-indexing/enabling-app-indexing.html

applink是能力,appindex是映射

你可能感兴趣的:(Google的deepLink和appLink)