语句托管在采用 JSON 编码的语句列表中,位于主账号上已知位置(如资产链接规范所定义)。一个语句列表包含一个或多个语句,而一个主账号只能有一个语句列表。
语句列表语法
请参阅语句列表语法。
对账单列表位置
声明列表托管在已知位置,具体取决于主账号类型(做出声明的网站或应用)。
网站对帐单列表
在网站上,对帐单列表是位于以下地址的文本文件:
scheme://domain/.well-known/assetlinks.json
请注意 .well-known 文件夹名称中的点。
来自服务器的任何响应(HTTP 200
除外)都会被视为错误,并会导致一个空语句列表。对于 HTTPS,任何没有证书链且可通过可信根列表进行验证的连接也会导致产生空语句列表。
示例
下面是一个网站上的语句列表示例:http://example.digitalassetlinks.org/.well-known/assetlinks.json
Android 应用声明列表
在 Android 应用中,语句列表是一个 JSON 代码段,其语法与网站语句文件相同,但它嵌入在 strings.xml 文件中,并在清单中引用,如下所示。
在 AndroidManifest.xml 中:
<manifest> <application> ... <meta-data android:name="asset_statements" android:resource="@string/asset_statements" /> ... </application> </manifest>
在 res/values/strings.xml 中:
<resources> ... <string name="asset_statements"> ... statement list ... </string> </resources>
示例
下面是一个支持与应用分享位置信息的 Android 应用的 res/values/strings.xml 代码段示例(目前不支持这项 Android 功能):
<resources> ... <string name="asset_statements"> [{ \"relation\": [\"delegate_permission/common.share_location\"], \"target\": { \"namespace\": \"web\", \"site\": \"https://example.com\" } }] </string> </resources>
匹配目标
每条陈述都关乎一个目标。在使用语句时,您必须将语句中的目标与现实中的某个实体进行匹配。如果语句目标与实体匹配,则应用语句。以下是确定目标是否与给定实体匹配的规则:
网站定位
对于网站,网站架构、主机和端口必须完全匹配。HTTP 和 HTTPS 的默认端口(分别为 80 和 443)是隐式假设的;如果语句目标描述的是 http://www.example.com:80,那么网站 http://www.example.com 会被视为匹配项。
示例
基于以下语句目标
"target": { "namespace": "web", "site": "https://www.google.com" }
以下 URI 将 匹配:
- https://www.google.com/
- https://www.google.com:443/
- https://www.google.com/foo
- https://www.google.com/foo?bar
- https://www.google.com/foo#bar
- https://user@password:www.google.com/
以下网址将不匹配:
- http://www.google.com/(架构错误)
- https://google.com/(主机名不匹配)
- https://www.google.com:444/(端口不匹配)
应用目标
对于应用,目标的证书哈希和软件包名称必须与应用完全匹配。