AppLink

简介

大家好!我是Tony,一个热爱技术,希望运用技术改变生活的的追梦男孩。闲话不多说,之前我总结过iOS的Universal Links,今天带大家探索一下Android的 AppLink

AppLink的能力

App Link是一种特殊类型的DeepLink,可让您的网站网址立即打开Android应用程序中的相应内容(无需用户选择应用程序)。

Android官方培训文档翻译

Android应用程序链接是一种特殊类型的深层链接,可让您的网站网址立即打开Android应用程序中的相应内容(无需用户选择应用程序)。
  要将Android应用程序链接添加到您的应用程序,请定义使用HTTP URL打开您的应用程序内容的意图过滤器(如创建应用程序内容的深层链接所述),并确认您拥有应用程序和网站URL(如本指南中所述)。如果系统成功验证您拥有这些网址,则系统会自动将这些网址意图路由到您的应用。
   要验证您的应用程序和您的网站的所有权,需要执行以下步骤:

在清单中请求自动应用链接验证。这向Android系统表明,它应该验证您的应用属于您的意图过滤器中使用的URL域。
通过在以下位置托管一个数字资产链接JSON文件来声明您的网站和您的意图过滤器之间的关系:

https://domain.name/.well-known/assetlinks.json
深层链接与应用链接的区别

深层链接是一个意图过滤器,允许用户直接在您的Android应用程序中输入特定的活动。点击其中一个链接可能会打开一个消歧义对话框,允许用户从多个应用程序(包括您的)中选择一个可以隐藏给定URL的应用程序。例如,图1显示用户点击地图链接后的消歧义对话框,询问是否在地图或Chrome中打开链接。


ResolverActivity
请求应用链接验证

要为您的应用启用链接处理验证,请在您的应用清单中的任何一个Web URL意图过滤器中设置android:autoVerify =“true”,其中包括android.intent.action.VIEW意图操作和android.intent.category.BROWSABLE意图类别,如以下清单代码段所示:

<activity ...>

    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="http" android:host="www.example.com" />
        <data android:scheme="https" />
    </intent-filter>

</activity>

当任何一个意图过滤器上都存在android:autoVerify =“true”时,在Android 6.0及更高版本的设备上安装应用程序会导致系统尝试验证与您的应用程序意图过滤器中的URL相关的所有主机。
验证涉及以下内容: 系统检查所有意图过滤器,包括: 操作:android.intent.action.VIEW 类别:android.intent.category.BROWSABLE和android.intent.category.DEFAULT 数据方案:http或https 对于在上述意向过滤器中找到的每个唯一主机名,Android会通过https://hostname/.well-known/assetlinks.json查询数字资产链接文件的相应网站。 只有当系统为清单中的所有主机找到匹配的数字资产链接文件时,才会将您的应用程序建立为指定URL模式的默认处理程序。

支持多个主机的应用程序链接

系统必须能够根据托管在所有相应网域上的数字资产链接文件来验证应用的URL意图过滤器的数据元素中指定的每个主机。如果任何验证失败,则该应用程序不会被验证为应用程序意图过滤器中定义的任何URL模式的默认处理程序。然后,系统会默认使用其标准行为来解析意图,如创建应用程序内容的深层链接中所述。   例如,如果在https://www.example.com/.well-known/assetlinks.json和https://www.example上找不到assetlinks.json文件,则具有以下意向过滤器的应用将无法通过验证达网络/。好知/ assetlinks.json:

<application>

  <activity android:name=”MainActivity”>
    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="http" android:host="www.example.com" />
      <data android:scheme="https" />
    </intent-filter>
  </activity>
  <activity android:name=”SecondActivity”>
    <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="https" android:host="www.example.net" />
    </intent-filter>
  </activity>

</application>

请记住,同一个intent过滤器中的所有<data>元素会合并在一起,以说明其组合属性的所有变体。例如,上面的第一个intent过滤器包含一个仅声明HTTPS方案的<data>元素。但是它与其他的<data>元素结合使用,意图过滤器同时支持http://www.example.comhttps://www.example.com。因此,如果要定义特定的URI方案和域组合,则必须创建单独的意向过滤器。

支持多个子域名的应用链接

数字资产链接协议将您的意图过滤器中的子域视为唯一的独立主机。因此,如果您的意图过滤器列出了具有不同子域的多个主机,则必须在每个域上发布有效的assetlinks.json。例如,以下intent过滤器将www.example.commobile.example.com包括为接受的意向URL主机。因此,必须在https://www.example.com/.well-known/assetlinks.jsonhttps://mobile.example.com/.well-known/assetlinks.json上发布有效的assetlinks.json。

<application>
  <activity android:name=”MainActivity”>
    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="https" android:host="www.example.com" />
      <data android:scheme="https" android:host="mobile.example.com" />
    </intent-filter>
  </activity>
</application>

或者,如果您使用通配符声明主机名(例如 .example.com),则必须以根主机名(example.com)发布assetlinks.json文件。例如,只要assetlinks.json文件在https://example.com/发布,具有以下意向过滤器的应用程序就会通过example.com的任何子名称(例如foo.example.com)的验证.well-known / assetlinks.json:

<application>
  <activity android:name=”MainActivity”>
    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="https" android:host="*.example.com" />
    </intent-filter>
  </activity>
</application>

以下示例assetlinks.json文件授予对com.example Android应用程序的链接开放权限:

[{
  "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"]
  }
}]

将网站与多个应用程序关联:

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example.puppies.app",
    "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"]
  }
  },
  {
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example.monkeys.app",
    "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验证文件

https://domain.name/.well-known/assetlinks.json

[参考链接](https://www.jianshu.com/p/6ff6dbcc569e
Android deeplink和AppLink原理

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容