简介
大家好!我是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中打开链接。
请求应用链接验证
要为您的应用启用链接处理验证,请在您的应用清单中的任何一个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.com和https://www.example.com。因此,如果要定义特定的URI方案和域组合,则必须创建单独的意向过滤器。
支持多个子域名的应用链接
数字资产链接协议将您的意图过滤器中的子域视为唯一的独立主机。因此,如果您的意图过滤器列出了具有不同子域的多个主机,则必须在每个域上发布有效的assetlinks.json。例如,以下intent过滤器将www.example.com和mobile.example.com包括为接受的意向URL主机。因此,必须在https://www.example.com/.well-known/assetlinks.json和https://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原理