As declarações são hospedadas em uma lista de declarações codificada em JSON em um local conhecido em um principal, conforme definido pela especificação de links de recursos. Uma lista de instruções contém uma ou mais instruções, e um principal pode ter apenas uma lista de instruções.
Sintaxe da lista de instruções
Consulte a sintaxe da lista de instruções.
Local da lista de instruções
A lista de declarações é hospedada em um local conhecido que depende do tipo de principal (o site ou app que faz as declarações).
Listas de declarações do site
Em um site, uma lista de declarações é um arquivo de texto localizado no seguinte endereço:
scheme://domain/.well-known/assetlinks.json
Observe o ponto no nome da pasta ".well-known".
Qualquer resposta do servidor diferente de HTTP 200 é tratada como um erro e resulta em
uma lista de instruções vazia. Para HTTPS, qualquer conexão sem uma cadeia de certificados que possa ser verificada com a lista de raízes confiáveis também vai resultar em uma lista de instruções vazia.
Exemplo
Confira um exemplo de lista de declarações em um site: http://example.digitalassetlinks.org/.well-known/assetlinks.json
Listas de declarações de apps Android
Em um app Android, a lista de declarações é um snippet JSON com a mesma sintaxe de um arquivo de declarações do site, mas está incorporada ao arquivo strings.xml e referenciada no manifesto, conforme mostrado a seguir.
No AndroidManifest.xml:
<manifest>
<application>
...
<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
...
</application>
</manifest>Em res/values/strings.xml:
<resources>
...
<string name="asset_statements">
... statement list ...
</string>
</resources>
Exemplo
Confira um exemplo de snippet res/values/strings.xml para um app Android que oferece suporte ao compartilhamento de local com o app (um recurso do Android que não é compatível no momento):
<resources>
...
<string name="asset_statements">
[{
\"relation\": [\"delegate_permission/common.share_location\"],
\"target\": {
\"namespace\": \"web\",
\"site\": \"https://example.com\"
}
}]
</string>
</resources>Correspondência de um destino
Cada instrução é sobre um destino. Ao consumir uma declaração, você precisa corresponder o destino em uma declaração a alguma entidade na realidade. Se o destino da instrução corresponder à entidade, a instrução será aplicada. Confira as regras para determinar se um destino corresponde a uma determinada entidade:
Segmentações por site
Para um site, o esquema, o host e a porta precisam corresponder exatamente. As portas padrão para HTTP e HTTPS (80 e 443, respectivamente) são presumidas implicitamente. Se um destino de declaração descrever http://www.example.com:80, o site http://www.example.com será considerado uma correspondência.
Exemplo
Considere o seguinte destino de declaração
"target": {
"namespace": "web",
"site": "https://www.google.com"
}Os seguintes URIs SERÃO correspondentes:
- 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/
Os URLs a seguir NÃO vão ser correspondentes:
- http://www.google.com/ (Esquema incorreto)
- https://google.com/ (O nome do host não corresponde)
- https://www.google.com:444/ (A porta não corresponde)
Segmentos de apps
Para um app, o hash do certificado e o nome do pacote do destino precisam corresponder exatamente ao aplicativo.