声明托管在主账号上一个众所周知的位置,以 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/(端口不匹配)
应用定位
对于应用,目标的证书哈希和软件包名称必须与应用完全一致。