概览
通过 Digital Asset Links 协议和 API,应用或网站可以发布有关其他应用或网站的公开且可验证的声明。例如,网站可以声明它与特定 Android 应用相关联,也可以声明它希望与其他网站共享用户凭据。
以下是 Digital Asset Links 的一些可能用途:
- 网站 A 声明,如果已安装应用,则应在移动设备上的指定应用中打开指向其网站的链接。
- 网站 A 声明可以与网站 B 共享其 Chrome 用户凭据,这样用户在网站 B 登录网站 A 后,便无需登录网站 B。
- 应用 A 声明可以与网站 B 共享设备设置(例如位置信息)。
关键术语
- 主帐号:主帐号是做出此类声明的应用或网站。在 Digital Asset Links 中,主帐号始终是托管对账单列表的应用或网站。
- 语句列表:语句包含在一个或多个语句的语句列表中。对账单列表采用明文形式且可公开访问,位于由主帐号控制且难以欺骗或篡改的位置。该文件可以是独立文件,也可以是其他较大内容的部分。例如,在网站上,它是整个文件;在 Android 应用中,它是应用清单中的一个部分。 任何人都可以查看和使用非专有方法查看对账单。如需了解详情,请参阅对帐单列表文档。
- 语句:语句是一种包含紧密关系的 JSON 构造,由关系(即语句中包含的操作,例如启用共享凭据)和目标(关系所适用的网站或应用)组成。因此,每个语句都类似于一个句子,其中 primary 表示有关 target 的关系。
- 语句使用方:语句使用方可向主帐号请求语句列表,检查是否存在针对给定主语句的语句,如果存在,可以执行指定的操作。如需了解详情,请参阅语句说明文档。
快速使用示例
下面这个非常简单的示例展示了网站 www.example.com 可以如何使用 Digital Asset Links 来指定指向该网站网址的任何链接都应在指定的应用而非浏览器中打开:
- 网站 www.example.com 发布了一个声明列表,网址为 https://www.example.com/.well-known/assetlinks.json。这是网站上某个声明列表的官方名称和位置;位于任何其他位置或以任何其他名称命名的声明列表都不适用于该网站。在我们的示例中,语句列表包含一个语句,授权其 Android 应用在其网站上打开链接:
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target" : { "namespace": "android_app", "package_name": "com.example.app", "sha256_cert_fingerprints": ["hash_of_app_certificate"] } }]
。语句列表支持 [ ] 标记中的语句数组,但我们的示例文件仅包含一个语句。sha256_cert_fingerprints
是应用的签名证书的 SHA256 指纹。如需了解详情,请参阅 Android App Links 文档。 - 上述语句中列出的 Android 应用具有一个 intent 过滤器,用于指定它要处理的网址的方案、主机和路径模式:在本例中,是 https://www.example.com。该 intent 过滤器包含 Android M 中新增的一个特殊属性
android:autoVerify
,表示 Android 应在安装应用时验证 intent 过滤器中描述的网站语句。 - 用户安装应用。Android 会看到包含
autoVerify
属性的 intent 过滤器,并检查指定网站是否存在语句列表;如果存在,Android 会检查该文件是否包含向应用授予链接处理的语句,并根据证书哈希验证语句。如果一切顺利,Android 会将所有 https://www.example.com intent 转发给 example.com 应用。 - 用户点击了设备上的 https://www.example.com/puppies 链接。此关联可存在于任意位置:浏览器、Google Search Appliance 建议中,或任何其他位置。Android 会将 intent 转发到 example.com 应用。
- example.com 应用收到 intent 并选择处理该 intent,打开应用中的小狗页面。如果由于某种原因,应用拒绝处理链接,或者应用不在设备上,则链接将发送到与 intent 模式匹配的下一个默认 intent 处理程序(通常是浏览器)。
重要注意事项和限制:
- 协议不会对发出该声明的主帐号进行身份验证,但该声明位于与该主帐号紧密关联的特定位置,并且受主帐号控制。
- 该协议不会对语句目标进行身份验证,但为调用者提供了一种对目标进行身份验证的方法(例如,语句通过证书哈希和软件包名称来识别移动应用目标)。
- 该协议本身不会执行任何语句操作;相反,它允许公开语句,使用方应用必须验证语句,然后决定是否以及如何执行操作。Android M 会自动执行这些步骤;例如,如果某网站委托链接处理特定应用,Android 会检查并验证该语句,验证目标应用,然后为该应用提供处理给定链接的选项。
- 该协议不允许对两个第三方发表声明:也就是说,网站 A 可以就网站 B 作出声明,但网站 A 无法就网站 B 与网站 C 的关系做出声明。不过,如果网站 B 信任网站 A,它可以检查网站 A 上是否有一条声明对网站 C 授予权限的声明,然后决定实现这一点。